Re: SetDrawModeが文字列のみ逆になる(バグ?) ( No.1 ) |
- 名前:管理人 日時:2020/07/31 01:50
SetDrawMode( DX_DRAWMODE_BILINEAR ); は、DrawExtendGraph や
DrawRotaGraph などの拡大・縮小を伴う描画に影響を与えますが、
DrawGraph や DrawString などの拡大・縮小が行われない描画には影響を与えません
また、SetGraphMode( 1920, 1080, 32 ); とゲーム画面を 1920x1080 に設定して、
ディスプレイの解像度が 3840x2160 の場合に行われる
『ゲーム画面の解像度をディスプレイ解像度へ拡大する処理』にも影響を与えません
1920x1080 のゲーム画面の解像度を 3840x2160 のディスプレイ解像度に
拡大するときにバイリニアフィルタリングを行うかどうかについては
SetFullScreenScalingMode という関数で設定を行います
// フルスクリーンモード時の解像度モードを設定する
int SetFullScreenScalingMode( int ResolutionMode ) ;
<関数リファレンス>
https://dxlib.xsrv.jp/function/dxfunc_graph3.html#R4N11
ともあれ、DrawString や DrawGraph は拡大・縮小を行わない描画なので
SetDrawMode( DX_DRAWMODE_BILINEAR ); でも
SetDrawMode( DX_DRAWMODE_NEAREST ); でも描画結果に変化は起きない筈です
確認のためにスペースキーを押すと画面に表示されている文字列を描画する際の
SetDrawMode の設定を DX_DRAWMODE_BILINEAR と DX_DRAWMODE_NEAREST で
切り替えるプログラムを組んで実行してみましたが、DX_DRAWMODE_BILINEAR でも
DX_DRAWMODE_NEAREST でも見た目に変化はありませんでした
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int IsBilinear = TRUE ;
// 画面モードを 1920x1080 に設定
SetGraphMode( 1920, 1080, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// アンチエイリアス付きフォントに変更
ChangeFontType( DX_FONTTYPE_ANTIALIASING_8X8 ) ;
// フォントを設定
ChangeFont( "メイリオ" ) ;
SetFontThickness( 0 ) ;
SetFontSize( 30 ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// スペースキーでバイリニアモードをON/OFF
if( GetInputChar( TRUE ) == ' ' )
{
IsBilinear = IsBilinear ? FALSE : TRUE ;
}
// 描画モードを設定
SetDrawMode( IsBilinear ? DX_DRAWMODE_BILINEAR : DX_DRAWMODE_NEAREST ) ;
// 描画モードを表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "バイリニアモード:%s", IsBilinear ? "ON" : "OFF" ) ;
// 文字列を描画
DrawString( 100, 100 + 48 * 0, "コントローラ設定", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 1, "解像度", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 2, "ウィンドウモード", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 3, "画質", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 4, "バイリニア", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 5, "音量", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 6, "セーブデータ初期化", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 7, "設定保存", GetColor( 0,255,0 ) ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
よろしければメカ様さんの環境でも見た目の変化が起きないか確認してみてください m(_ _)m
|
Re: SetDrawModeが文字列のみ逆になる(バグ?) ( No.2 ) |
- 名前:メカ様 日時:2020/07/31 04:58
お世話になっております
只今確認いたしました。
>拡大するときにバイリニアフィルタリングを行うかどうかについては
SetFullScreenScalingMode という関数で設定を行います
申し訳ございませんでした。よく確認してみたところ以下のようなコードを記載していたため、
SetFullScreenScalingMode および SetDrawMode の両方が切り替わっておりました。
以下コピペです
// バイリニア法にして画質を向上させる
if (SysInfo.Bilinear)
{
DX.SetFullScreenScalingMode(DX.DX_DRAWMODE_BILINEAR);
DX.SetDrawMode(DX.DX_DRAWMODE_BILINEAR);
}
else
{
DX.SetFullScreenScalingMode(DX.DX_DRAWMODE_NEAREST);
DX.SetDrawMode(DX.DX_DRAWMODE_NEAREST);
}
>ともあれ、DrawString や DrawGraph は拡大・縮小を行わない描画なので
DrawGraph"系"と書いていましたが、
私のプログラム上は様々な解像度に対応させるために全てDrawExtendGraphで変形描画しているため、私にとっての拡大縮小の概念が特殊なのかもしれません。
例)
// 設定した解像度(描画領域)を取得する
DX.GetWindowSize(out int Screen_X, out int Screen_Y);
// 画面比率を計算する(ベースとなる解像度は1080p)
float Ratio_X = Screen_X / 1920f;
float Ratio_Y = Screen_Y / 1080f;
// グラフィックハンドル
int Handle = DX.LoadGraph("Pass");
// 画面いっぱいに画像を描画する
DX.DrawExtendGraph((int)(0 * Ratio_X), (int)(0 * Ratio_Y), (int)(1920 * Ratio_X), (int)(1080 * Ratio_Y), Handle,DX.TRUE);
// 描画領域の真ん中らへんに画像を描画する
DX.DrawExtendGraph((int)(910 * Ratio_X), (int)(490 * Ratio_Y), (int)(1010 * Ratio_X), (int)(590 * Ratio_Y), Handle, DX.TRUE);
なお、SetFullScreenScalingModeに修正した以下プログラムにて提示した画像と同じようにバイニリアモードが逆(?)に動作していることを確認しました。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int IsBilinear = TRUE ;
// 画面モードを 1920x1080 に設定
SetGraphMode( 1920, 1080, 32 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// アンチエイリアス付きフォントに変更
ChangeFontType( DX_FONTTYPE_ANTIALIASING_8X8 ) ;
// フォントを設定
ChangeFont( "メイリオ" ) ;
SetFontThickness( 0 ) ;
SetFontSize( 30 ) ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// スペースキーでバイリニアモードをON/OFF
if( GetInputChar( TRUE ) == ' ' )
{
IsBilinear = IsBilinear ? FALSE : TRUE ;
}
// フルスクリーンモード時の解像度モードを設定する
SetFullScreenScalingMode( IsBilinear ? DX_DRAWMODE_BILINEAR : DX_DRAWMODE_NEAREST ) ;
// 描画モードを表示
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "バイリニアモード:%s", IsBilinear ? "ON" : "OFF" ) ;
// 文字列を描画
DrawString( 100, 100 + 48 * 0, "コントローラ設定", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 1, "解像度", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 2, "ウィンドウモード", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 3, "画質", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 4, "バイリニア", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 5, "音量", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 6, "セーブデータ初期化", GetColor( 255,255,255 ) ) ;
DrawString( 100, 100 + 48 * 7, "設定保存", GetColor( 0,255,0 ) ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
お手数をおかけしますが再度ご確認をよろしくお願いします。
|
Re: SetDrawModeが文字列のみ逆になる(バグ?) ( No.3 ) |
- 名前:管理人 日時:2020/07/31 23:22
> // バイリニア法にして画質を向上させる
> if (SysInfo.Bilinear)
> {
> DX.SetFullScreenScalingMode(DX.DX_DRAWMODE_BILINEAR);
> DX.SetDrawMode(DX.DX_DRAWMODE_BILINEAR);
> }
> else
> {
> DX.SetFullScreenScalingMode(DX.DX_DRAWMODE_NEAREST);
> DX.SetDrawMode(DX.DX_DRAWMODE_NEAREST);
> }
すみません、SetFullScreenScalingMode に渡す値は紛らわしいのですが
DX_DRAWMODE_BILINEAR や DX_DRAWMODE_NEAREST ではなく
DX_FSSCALINGMODE_BILINEAR または DX_FSSCALINGMODE_NEAREST となります
> なお、SetFullScreenScalingModeに修正した以下プログラムにて提示した画像と同じようにバイニリアモードが逆(?)に動作していることを確認しました。
載せていただいたプログラムの
SetFullScreenScalingMode( IsBilinear ? DX_DRAWMODE_BILINEAR : DX_DRAWMODE_NEAREST ) ;
こちらの部分を
SetFullScreenScalingMode( IsBilinear ? DX_FSSCALINGMODE_BILINEAR : DX_FSSCALINGMODE_NEAREST ) ;
に変更したところ、正常に動作しましたので、よろしければお試しください m(_ _)m
|
|