Resourceからテクスチャを読み込めない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イカ0x0
記事: 1
登録日時: 3年前

Resourceからテクスチャを読み込めない

#1

投稿記事 by イカ0x0 » 3年前

DirectX9を使っているものです。
D3DXCreateTextureFromResourceを使ってリソースからテクスチャを読み込もうとしているのですが、うまく行きません。

コード:

//resource.rc
#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"




LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_png1           png            "test.png"



//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
Dialog DIALOG 0, 0, 101, 100
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_THICKFRAME | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "Dialog"
FONT 10, "MS UI Gothic"
{
    LTEXT           "解像度を選択してください", 0, 7, 3, 105, 14, SS_LEFT, WS_EX_LEFT
    AUTORADIOBUTTON "640x480", IDC_RADIO1, 7, 17, 43, 8, 0, WS_EX_LEFT
    AUTORADIOBUTTON "960x720", IDC_RADIO2, 7, 28, 43, 8, 0, WS_EX_LEFT
    AUTORADIOBUTTON "1280x960(推奨)", IDC_RADIO3, 7, 39, 67, 8, 0, WS_EX_LEFT
    AUTOCHECKBOX    "フルスクリーンで起動する", IDC_FULL, 7, 55, 92, 8, 0, WS_EX_LEFT
    AUTOCHECKBOX    "起動時に毎回訊ねる", IDC_EVERY, 7, 68, 83, 8, 0, WS_EX_LEFT
    PUSHBUTTON      " ゲーム起動 ", IDOK, 26, 81, 52, 14, 0, WS_EX_LEFT
}



//
// String Table resources
//
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
{
    IDS_HIDEN_STRING              "Start WindowMode, Push LControl,LShift and P Key."
}

コード:

//resource.h
#define IDR_png1                                100

コード:

//Main.cpp
#include<windows.h>
#include<resource.h>
#include<d3d9.h>
#include<d3dx9.h>
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<dinput.h>
#include<dsound.h>
//定数
#define D3DFVF_TLVERTEX     (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1)
//Direct3D
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
#pragma comment( lib, "dxerr.lib" )
//DirectInput
#pragma comment( lib, "dinput8.lib" )
#pragma comment( lib, "dxguid.lib" )
//DirectSound
#pragma comment( lib, "dsound.lib" )
#pragma comment( lib, "winmm.lib" )
//fopen警告の回避
#pragma warning(disable : 4996)

FILE *fp;
FILE *fp2;
FILE *fp3;
FILE *fp4;
FILE *fpfull;
FILE *fp640;
FILE *fp960;
FILE *fp1280;
RECT rw, rc;
HWND hwnd;
UINT wmId;
MSG msg;
WNDCLASS winc;
LPDIRECT3D9 m_pD3D = NULL;
D3DPRESENT_PARAMETERS m_D3DPP;
D3DDISPLAYMODE d3ddm;
LPDIRECT3DDEVICE9 m_pD3DDevice = NULL;
//DirectInput
LPDIRECTINPUT8 g_pInputInterface = NULL;
LPDIRECTINPUTDEVICE8 device;
HRESULT hr;
BYTE KeyState[256];
//DirectSound
LPDIRECTSOUND8 lpDS;
char pngfile01;
LPDIRECTSOUNDBUFFER lpPrimary = NULL;
LPDIRECTSOUNDBUFFER lpSecondary = NULL;
LPDIRECTSOUNDNOTIFY pDSNotify;
DSBPOSITIONNOTIFY aPosNotify[2];
//resource
HMODULE hCurInst;


int new_width;
int new_height;
char *filename = "AET.setup";
char askoutput[99999] = "Ask Every Time = TRUE;";
char dontaskoutput[99999] = "Ask Every Time = FALSE;";
char mode640on[999999]     = "640MODE = TRUE;";
char mode960on[999999]     = "960MODE = TRUE;";
char mode1280on[999999]     = "1280MODE = TRUE;";
char mode640off[999999]     = "640MODE = FALSE;";
char mode960off[999999]     = "960MODE = FALSE;";
char mode1280off[99999]     = "1280MODE = FALSE;";
char fullmode[999999]    = "FullScreenMode = TRUE;";
char fullmodeoff[999999] = "FullScreenMode = FALSE;";
char buffer640[9999];
char buffer960[9999];
char buffer1280[999];
char check640buf[999999];
char check960buf[999999];
char check1280buf[999999];
char *screen1 = "Screen1.custom";
char *screen2 = "Screen2.custom";
char *screen3 = "Screen3.custom";
char *full = "Full.fscr";
char fullbuf[999999];
char buf[99999];
char fullcheckbuf[999999];
BOOL bCheck1;
BOOL bCheck2;
BOOL bCheck3;
BOOL bFull;
BOOL wrightcheck640;
BOOL wrightcheck960;
BOOL wrightcheck1280;
BOOL playandstop = FALSE;
DWORD PlayPos = 0;
DWORD CheckPlayPos = 0;
BOOL FullScreenMODE;
HRESULT ret;
MMCKINFO mSrcWaveFile;
MMCKINFO mSrcWaveFmt;
MMCKINFO mSrcWaveData;
LPWAVEFORMATEX wf;
BOOL Konami01 = FALSE;
BOOL Konami02 = FALSE;
BOOL Konami03 = FALSE;
BOOL Konami04 = FALSE;
BOOL Konami05 = FALSE;
BOOL Konami06 = FALSE;
BOOL Konami07 = FALSE;
BOOL Konami08 = FALSE;
BOOL Konami09 = FALSE;
BOOL Konami10 = FALSE;

BOOL CALLBACK DialogProc02(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
	switch (msg) {
	case WM_LBUTTONUP:
		EndDialog(hwnd , IDOK);
		return TRUE;
	}
	return FALSE;
}

typedef struct _D3DTLVERTEX {
    float   x,y,z;                                  // 頂点のXYZ座標
    float   rhw;                                    // 描画時にXYZから割られる数(小難しい話なのでここは常に1となると覚えよう)
    DWORD   color;                                  // 頂点の色(32bitアルファ値あり)
    float   tu, tv;                                 // 頂点に割り当てるテクスチャのUV値
} D3DTLVERTEX, *LPD3DTLVERTEX;

//DirectGraphics
D3DTLVERTEX v[4];
D3DTLVERTEX i[8];
LPDIRECT3DTEXTURE9 g_pTexture01 = NULL;
LPDIRECT3DTEXTURE9 g_pTexture02 = NULL;

//wav読み込み関数

BOOL CreateSoundBuffer( LPDIRECTSOUNDBUFFER *dsb,const char *file )
{

    // WAVファイルをロード
    HMMIO hSrc;
    hSrc = mmioOpenA( (LPSTR)file,NULL,MMIO_ALLOCBUF|MMIO_READ|MMIO_COMPAT );
    if( !hSrc ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました1"),TEXT("ERROR!!"),MB_OK );
        return FALSE;
    }

    // 'WAVE'チャンクチェック
    ZeroMemory( &mSrcWaveFile,sizeof(mSrcWaveFile) );
    ret = mmioDescend( hSrc,&mSrcWaveFile,NULL,MMIO_FINDRIFF );
    if( mSrcWaveFile.fccType!=mmioFOURCC('W','A','V','E') ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました2"),TEXT("ERROR!!"),MB_OK );
        mmioClose( hSrc,0 );
        return FALSE;
    }

    // 'fmt 'チャンクチェック
    ZeroMemory( &mSrcWaveFmt,sizeof(mSrcWaveFmt) );
    ret = mmioDescend( hSrc,&mSrcWaveFmt,&mSrcWaveFile,MMIO_FINDCHUNK );
    if( mSrcWaveFmt.ckid!=mmioFOURCC('f','m','t',' ') ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました3"),TEXT("ERROR!!"),MB_OK );
        mmioClose( hSrc,0 );
        return FALSE;
    }

    // ヘッダサイズの計算
    int iSrcHeaderSize = mSrcWaveFmt.cksize;
    if( iSrcHeaderSize<sizeof(WAVEFORMATEX) )
        iSrcHeaderSize=sizeof(WAVEFORMATEX);

    // ヘッダメモリ確保
    wf = (LPWAVEFORMATEX)malloc( iSrcHeaderSize );
    if( !wf ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました4"),TEXT("ERROR!!"),MB_OK );
        mmioClose( hSrc,0 );
        return FALSE;
    }
    ZeroMemory( wf,iSrcHeaderSize );

    // WAVEフォーマットのロード
    ret = mmioRead( hSrc,(char*)wf,mSrcWaveFmt.cksize );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました5"),TEXT("ERROR!!"),MB_OK );
        free( wf );
        mmioClose( hSrc,0 );
        return FALSE;
    }

    // fmtチャンクに戻る
    mmioAscend( hSrc,&mSrcWaveFmt,0 );

    // dataチャンクを探す
    while(1) {
        // 検索
        ret = mmioDescend( hSrc,&mSrcWaveData,&mSrcWaveFile,0 );
        if( FAILED(ret) ) {
            MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました9"),TEXT("ERROR!!"),MB_OK );
            free( wf );
            mmioClose( hSrc,0 );
            return FALSE;
        }
        if( mSrcWaveData.ckid==mmioStringToFOURCCA("data",0) )
            break;
        // 次のチャンクへ
        ret = mmioAscend( hSrc,&mSrcWaveData,0 );
    }

    // サウンドバッファの作成
    DSBUFFERDESC dsdesc;
    ZeroMemory( &dsdesc,sizeof(DSBUFFERDESC) );
    dsdesc.dwSize = sizeof( DSBUFFERDESC );
    dsdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC | DSBCAPS_LOCDEFER | DSBCAPS_GLOBALFOCUS;
    dsdesc.dwBufferBytes = mSrcWaveData.cksize;
    dsdesc.lpwfxFormat = wf;
    dsdesc.guid3DAlgorithm = DS3DALG_DEFAULT;
    ret = lpDS->CreateSoundBuffer( &dsdesc,dsb,NULL );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました11"),TEXT("ERROR!!"),MB_OK );
        free( wf );
        mmioClose( hSrc,0 );
        return FALSE;
    }

    // ロック開始
    LPVOID pMem1,pMem2;
    DWORD dwSize1,dwSize2;
    ret = (*dsb)->Lock( 0,mSrcWaveData.cksize,&pMem1,&dwSize1,&pMem2,&dwSize2,0 );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "サウンドデバイスが見つかりませんでした。オーディオインターフェイスを接続してください。"),TEXT("ERROR!!"),MB_OK );
        free( wf );
        mmioClose( hSrc,0 );
        return FALSE;
    }

    // データ書き込み
    mmioRead( hSrc,(char*)pMem1,dwSize1 );
    mmioRead( hSrc,(char*)pMem2,dwSize2 );

    // ロック解除
    (*dsb)->Unlock( pMem1,dwSize1,pMem2,dwSize2 );

    // ヘッダ用メモリを開放
    free( wf );

    // WAVを閉じる
    mmioClose( hSrc,0 );

    return TRUE;
}
//DirectSound開放関数
BOOL DirectSoundExit( void )
{
    if( lpSecondary ) {
        lpSecondary->Release();
        lpSecondary = NULL;
    }

    if( lpPrimary ) {
        lpPrimary->Release();
        lpPrimary = NULL;
    }

    if( lpDS ) {
        lpDS->Release();
        lpDS = NULL;
    }

    // COMの終了
    CoUninitialize();

    return TRUE;
}

BOOL CreatePrimaryBuffer( void )
{
    HRESULT ret;
    WAVEFORMATEX wf;

    // プライマリサウンドバッファの作成
    DSBUFFERDESC dsdesc;
    ZeroMemory( &dsdesc,sizeof(DSBUFFERDESC) );
    dsdesc.dwSize           = sizeof( DSBUFFERDESC );
    dsdesc.dwFlags          = DSBCAPS_PRIMARYBUFFER;
    dsdesc.dwBufferBytes    = 0;
    dsdesc.lpwfxFormat      = NULL;
    ret = lpDS->CreateSoundBuffer( &dsdesc,&lpPrimary,NULL );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました13"),TEXT("ERROR!!"),MB_OK );
        return FALSE;
    }

    // プライマリバッファのステータスを決定
    wf.cbSize = sizeof( WAVEFORMATEX );
    wf.wFormatTag           = WAVE_FORMAT_PCM;
    wf.nChannels            = 2;
    wf.nSamplesPerSec       = 44100;
    wf.wBitsPerSample       = 16;
    wf.nBlockAlign          = wf.nChannels * wf.wBitsPerSample / 8;
    wf.nAvgBytesPerSec      = wf.nSamplesPerSec * wf.nBlockAlign;
    ret = lpPrimary->SetFormat( &wf );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました14"),TEXT("ERROR!!"),MB_OK );
        return FALSE;
    }

    return TRUE;
}

//ファイル削除関数
int deleteFile(const char* fileName)
{
    return !(remove(fileName));
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
	case WM_ERASEBKGND:
		return 0;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

BOOL DirectSoundInit( void )
{
    HRESULT ret;

    // COMの初期化
    CoInitialize( NULL );

    // DirectSound8を作成
    ret = DirectSoundCreate8( NULL,&lpDS,NULL );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました15"),TEXT("ERROR!!"),MB_OK );
        return FALSE;
    }

    // 強調モード
    ret = lpDS->SetCooperativeLevel(hwnd,DSSCL_EXCLUSIVE|DSSCL_PRIORITY );
    if( FAILED(ret) ) {
        MessageBox(NULL,TEXT( "DirectSoundの初期化に失敗しました16"),TEXT("ERROR!!"),MB_OK );
        return FALSE;
    }

    return TRUE;
}

BOOL CALLBACK DialogProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
    switch (msg) {
	case WM_INITDIALOG:
		//Full.fscrを調べてフルスクリーンモードで起動するにチェックを入れる
		fp = fopen(full,"r");
		//もしファイルが無かった場合、フルスクリーンモード状態でファイル作成を行う。
		if(fp == NULL){
			fp = fopen(full,"w+");
			fputs(fullmode,fp);
			fclose(fp);
		}
		fgets(fullbuf,999999,fp);
		if(strcmp(fullbuf,fullmode) == 0){
			SendMessage(GetDlgItem(hwnd, IDC_FULL) , BM_SETCHECK , BST_CHECKED , 0);
		}
		else if(strcmp(fullbuf,fullmodeoff) == 0){
			SendMessage(GetDlgItem(hwnd, IDC_FULL) , BM_SETCHECK , BST_UNCHECKED , 0);
		}
        // 毎回訊ねるにチェックを入れる
        SendMessage(GetDlgItem(hwnd, IDC_EVERY) , BM_SETCHECK , BST_CHECKED , 0);
		//どの解像度モードにチェックを入れるか確かめる
		fp = fopen(screen1,"r");
		if(fp == NULL){
			fp = fopen(screen1,"w+");
			fputs(mode640on,fp);
			fclose(fp);
		}
		fgets(buffer640,999999,fp);
		if(strcmp(buffer640,mode640on) == 0){
			SendMessage(GetDlgItem(hwnd, IDC_RADIO1) , BM_SETCHECK , BST_CHECKED , 0);
		}
		fclose(fp);
		fp = fopen(screen2,"r");
		if(fp == NULL){
			fp = fopen(screen2,"w+");
			fputs(mode960off,fp);
			fclose(fp);
		}
		fgets(buffer960,999999,fp);
		if(strcmp(buffer960,mode960on) == 0){
			SendMessage(GetDlgItem(hwnd, IDC_RADIO2) , BM_SETCHECK , BST_CHECKED , 0);
		}
		fclose(fp);
		fp = fopen(screen3,"r");
		if(fp == NULL){
			fp = fopen(screen3,"w+");
			fputs(mode1280off,fp);
			fclose(fp);
		}
		fgets(buffer1280,999999,fp);
		if(strcmp(buffer1280,mode1280on) == 0){
			SendMessage(GetDlgItem(hwnd, IDC_RADIO3) , BM_SETCHECK , BST_CHECKED , 0);
		}
		fclose(fp);
        return 0;
    case WM_CLOSE:
		 PostQuitMessage(0);
		 EndDialog(hwnd , NULL);
         return TRUE;
    case WM_COMMAND:
		wmId = LOWORD(wp);
		switch(wmId){
		case IDOK:
			//もし毎回訊ねるにチェックが入っていたら、AET.datにaskoutputを書き込む
			if(SendMessage(GetDlgItem(hwnd, IDC_EVERY), BM_GETCHECK, 0, 0) == BST_CHECKED){
				fp = fopen(filename,"w+");

				fputs(askoutput,fp);

				fclose(fp);
			}
			//もし毎回訊ねるにチェックが入っていなかったら、AET.datにdontaskoutputを書き込む
			if(SendMessage(GetDlgItem(hwnd, IDC_EVERY), BM_GETCHECK, 0, 0) == BST_UNCHECKED){
				fp = fopen(filename,"w+");

				fputs(dontaskoutput,fp);

				fclose(fp);
			}

			//チェックボタンの状態で書き込む
			if(SendMessage(GetDlgItem(hwnd, IDC_RADIO1), BM_GETCHECK, 0, 0) == BST_CHECKED) {
				bCheck1 = TRUE;
			}
			else if(SendMessage(GetDlgItem(hwnd, IDC_RADIO2), BM_GETCHECK, 0, 0) == BST_CHECKED) {
				bCheck2 = TRUE;
			}
			else if(SendMessage(GetDlgItem(hwnd, IDC_RADIO3), BM_GETCHECK, 0, 0) == BST_CHECKED) {
				bCheck3 = TRUE;
			}

			if(SendMessage(GetDlgItem(hwnd, IDC_FULL), BM_GETCHECK, 0, 0) == BST_CHECKED) {
				bFull = TRUE;
			}
			else if(SendMessage(GetDlgItem(hwnd, IDC_FULL), BM_GETCHECK, 0, 0) == BST_UNCHECKED) {
				bFull = FALSE;
			}

			EndDialog(hwnd , IDOK);
			return TRUE;
		}
		return 0;
	case WM_ERASEBKGND:
		//画面外に出ても再描画
		return 0;
    }
    return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, int nCmdShow) {


	//-リソースの書き出し終了-//

    d3ddm.Width = 640;
    d3ddm.Height = 480;
    d3ddm.Format = D3DFMT_A8R8G8B8;
    d3ddm.RefreshRate = 60;
    winc.style = CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc = WndProc;
    winc.cbClsExtra = winc.cbWndExtra = 0;
    winc.hInstance = hInstance;
    winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winc.hCursor = LoadCursor(NULL, IDC_ARROW);
    winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName = NULL;
    winc.lpszClassName = TEXT("WCN");

    if (!RegisterClass(&winc)) return 0;

    hwnd = CreateWindow(
        TEXT("WCN"), TEXT("test"),
        WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX,
        175, 50, 640, 480, NULL, NULL,
        hInstance, NULL
    );

    if ((m_pD3D = ::Direct3DCreate9(D3D_SDK_VERSION)) == 0) {
		MessageBox(NULL,TEXT("DirectXの初期化に失敗しました\nハードウェアのDirectX対応状況をご覧ください"),TEXT("ERROR!!"),MB_OK);
        return E_FAIL;
    }

	//もし、th01.datが存在しなかったら、ファイルを新規作成する。
	fp = fopen(filename,"r");

	if(fp == NULL){
		fp = fopen(filename,"w+");

		fputs(askoutput,fp);

		fclose(fp);
	}

	fgets(buf,99999,fp);

	if(strcmp(buf,"") == 0){
		DialogBox(
			(HINSTANCE)GetWindowLong(hwnd , GWL_HINSTANCE) ,
			TEXT("Dialog") , hwnd , DialogProc
		);
	}
	//毎回聞くがTRUEだった場合
	if(strcmp(buf, "Ask Every Time = TRUE;") == 0){
		DialogBox(
			(HINSTANCE)GetWindowLong(hwnd , GWL_HINSTANCE) ,
			TEXT("Dialog") , hwnd , DialogProc
		);
	}
	//毎回聞くがFALSEだった場合。
	else if(strcmp(buf, "Ask Every Time = FALSE;") == 0){
		
	}
	//もし関係のない文字列が書かれていた場合
	else{
		fp = fopen(filename,"w+");

		fputs(askoutput,fp);

		fclose(fp);

		new_width = (rw.right - rw.left) - (rc.right - rc.left) + 960;
		new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 720;
	}

	//bCheckを調べて書き込む
	if(bCheck1 == TRUE){
		fp = fopen(screen1,"w+");
		fputs(mode640on,fp);
		fclose(fp);
		
		fp = fopen(screen2,"w+");
		fputs(mode960off,fp);
		fclose(fp);

		fp = fopen(screen3,"w+");
		fputs(mode1280off,fp);
		fclose(fp);
	}
	else if(bCheck2 == TRUE){
		fp = fopen(screen1,"w+");
		fputs(mode640off,fp);
		fclose(fp);
		
		fp = fopen(screen2,"w+");
		fputs(mode960on,fp);
		fclose(fp);

		fp = fopen(screen3,"w+");
		fputs(mode1280off,fp);
		fclose(fp);
	}
	else if(bCheck3 == TRUE){
		fp = fopen(screen1,"w+");
		fputs(mode640off,fp);
		fclose(fp);
		
		fp = fopen(screen2,"w+");
		fputs(mode960off,fp);
		fclose(fp);

		fp = fopen(screen3,"w+");
		fputs(mode1280on,fp);
		fclose(fp);
	}
	if(bFull == TRUE){
		fp = fopen(full,"w+");
		fputs(fullmode,fp);
		fclose(fp);
	}
	else if(bFull == FALSE){
		fp = fopen(full,"w+");
		fputs(fullmodeoff,fp);
		fclose(fp);
	}

	ZeroMemory(&m_D3DPP, sizeof(D3DPRESENT_PARAMETERS));

	fp = fopen(full,"r");
	fgets(fullbuf,999999,fp);
	if(strcmp(fullbuf,"FullScreenMode = FALSE;") == 0){
		m_D3DPP.Windowed = TRUE;
	}
	if (strcmp(fullbuf,"FullScreenMode = TRUE;") == 0) {
        m_D3DPP.Windowed = FALSE;
        m_D3DPP.BackBufferWidth = 1280;
        m_D3DPP.BackBufferHeight = 960;
	}
	fclose(fp);

	m_D3DPP.BackBufferCount = 1;
    m_D3DPP.BackBufferFormat = d3ddm.Format;
    m_D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
    m_D3DPP.EnableAutoDepthStencil = TRUE;
    m_D3DPP.AutoDepthStencilFormat = D3DFMT_D16;
	m_D3DPP.MultiSampleType = D3DMULTISAMPLE_NONE;

    if (FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hwnd,
        D3DCREATE_HARDWARE_VERTEXPROCESSING,
        &m_D3DPP, &m_pD3DDevice))) {

        if (FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
            D3DDEVTYPE_HAL,
            hwnd,
            D3DCREATE_SOFTWARE_VERTEXPROCESSING,
            &m_D3DPP, &m_pD3DDevice))) {
            if (FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                D3DDEVTYPE_REF,
                hwnd,
                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                &m_D3DPP, &m_pD3DDevice))) {
                return E_FAIL;
            }
        }
    }

	if (hwnd == NULL) return 0;
	
	//screen1を調べてウィンドウサイズを確定
	fp = fopen(screen1,"r");
	fgets(check640buf,999999,fp);
	if(strcmp(check640buf,mode640on) == 0){
		new_width = (rw.right - rw.left) - (rc.right - rc.left) + 640;
		new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 480;
		wrightcheck640 = TRUE;
	}
	fclose(fp);

	//screen2を調べてウィンドウサイズを確定
	fp = fopen(screen2,"r");
	fgets(check960buf,999999,fp);
	if(strcmp(check960buf,mode960on) == 0){
		new_width = (rw.right - rw.left) - (rc.right - rc.left) + 960;
		new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 720;
		wrightcheck960 = TRUE;
	}
	fclose(fp);

	//screen3を調べてウィンドウサイズを確定
	fp = fopen(screen3,"r");
	fgets(check1280buf,999999,fp);
	if(strcmp(check1280buf,mode1280on) == 0){
		new_width = (rw.right - rw.left) - (rc.right - rc.left) + 1280;
		new_height = (rw.bottom - rw.top) - (rc.bottom - rc.top) + 960;
		wrightcheck1280 = TRUE;
	}
	fclose(fp);

	SetWindowPos(hwnd, NULL, 0, 0, new_width, new_height, SWP_NOMOVE | SWP_NOZORDER);

	//DirectSoundの初期化

	//DirectInpuの初期化
	hr = DirectInput8Create(hInstance,
		DIRECTINPUT_VERSION,
		IID_IDirectInput8,
		(void**)&g_pInputInterface,
		NULL
		);
	if(FAILED(hr)){
		MessageBox(NULL,TEXT("DirectInputの初期化に失敗しました"),TEXT("ERROR!!"),MB_OK);
	}

	hr = g_pInputInterface->CreateDevice(
		GUID_SysKeyboard,
		&device,
		NULL);
	if(FAILED(hr)){
		MessageBox(NULL,TEXT("DirectInputの初期化に失敗しました"),TEXT("ERROR!!"),MB_OK);
	}

	HRESULT hr = device->SetDataFormat(&c_dfDIKeyboard);
	if(FAILED(hr)){
		MessageBox(NULL,TEXT("DirectInputの初期化に失敗しました"),TEXT("ERROR!!"),MB_OK);
	}

	hr = device->SetCooperativeLevel(
			hwnd, 
			DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);

	//DirectInputの制御開始
	hr = device->Acquire();

	//-頂点情報の初期化開始-//
	fp = fopen(full,"r");
	fgets(fullcheckbuf,999999,fp);
	if(strcmp(fullcheckbuf,"FullScreenMode = FALSE;") == 0){
		ZeroMemory( &v,sizeof(v) );
		v[0].x      = 0.0f;
		v[0].y      = 0.0f;
		v[0].z      = 0.0f;
		v[0].rhw    = 1.0f;
		v[0].color  = 0xFFFFFFFF;
		v[0].tu     = 0.0f;
		v[0].tv     = 0.0f;

		v[1].x      = 634.0f;
		v[1].y      = 0.0f;
		v[1].z      = 0.0f;
		v[1].rhw    = 1.0f;
		v[1].color  = 0xFFFFFFFF;
		v[1].tu     = 1.0f;
		v[1].tv     = 0.0f;

		v[2].x      = 0.0f;
		v[2].y      = 447.0f;
		v[2].z      = 0.0f;
		v[2].rhw    = 1.0f;
		v[2].color  = 0xFFFFFFFF;
		v[2].tu     = 0.0f;
		v[2].tv     = 1.0f;

		v[3].x      = 634.0f;
		v[3].y      = 447.0f;
		v[3].z      = 0.0f;
		v[3].rhw    = 1.0f;
		v[3].color  = 0xFFFFFFFF;
		v[3].tu     = 1.0f;
		v[3].tv     = 1.0f;

		FullScreenMODE = TRUE;
	}
	else if(strcmp(fullcheckbuf,"FullScreenMode = TRUE;") == 0){
		ZeroMemory( &v,sizeof(v) );
		v[0].x      = 0.0f;
		v[0].y      = 0.0f;
		v[0].z      = 0.0f;
		v[0].rhw    = 1.0f;
		v[0].color  = 0xFFFFFFFF;
		v[0].tu     = 0.0f;
		v[0].tv     = 0.0f;

		v[1].x      = 1280.0f;
		v[1].y      = 0.0f;
		v[1].z      = 0.0f;
		v[1].rhw    = 1.0f;
		v[1].color  = 0xFFFFFFFF;
		v[1].tu     = 1.0f;
		v[1].tv     = 0.0f;

		v[2].x      = 0.0f;
		v[2].y      = 960.0f;
		v[2].z      = 0.0f;
		v[2].rhw    = 1.0f;
		v[2].color  = 0xFFFFFFFF;
		v[2].tu     = 0.0f;
		v[2].tv     = 1.0f;

		v[3].x      = 1280.0f;
		v[3].y      = 960.0f;
		v[3].z      = 0.0f;
		v[3].rhw    = 1.0f;
		v[3].color  = 0xFFFFFFFF;
		v[3].tu     = 1.0f;
		v[3].tv     = 1.0f;

		FullScreenMODE = FALSE;
	}
	fclose(fp);

	//ウィンドウの表示
	ShowWindow(hwnd,SW_SHOW);


	/////テクスチャの設定開始/////



	/////テクスチャの設定終了/////
	m_pD3DDevice->SetFVF( D3DFVF_TLVERTEX );


	////Resourceの読み込み開始////
	
	/*ここができていないと思われる*/
	D3DXCreateTextureFromResource(m_pD3DDevice,NULL,L"IDR_png1",&g_pTexture01);

	////Resourceの読み込み終了////

	m_pD3DDevice->SetTexture(0,g_pTexture01);

	//メインループ
    while (GetMessage(&msg, NULL, 0, 0)) {
        //BeginScene
		if (FAILED(m_pD3DDevice->Clear(0, NULL,
            D3DCLEAR_TARGET |
            D3DCLEAR_ZBUFFER,
            D3DCOLOR_XRGB(0, 0, 0),
            1.0f,
            0))) {
            return 0;
        }

		 if (FAILED(m_pD3DDevice->BeginScene())) {
            return 0;
        }

		m_pD3DDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, v, sizeof(D3DTLVERTEX) );

		hr = device->GetDeviceState(256, KeyState);

		m_pD3DDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP, 2, v, sizeof(D3DTLVERTEX) );

        m_pD3DDevice->EndScene();

		if (FAILED(m_pD3DDevice->Present(0, 0, 0, 0))) {
            m_pD3DDevice->Reset(&m_D3DPP);
        }

        DispatchMessage(&msg);
    }
	m_pD3DDevice->Release();
	DirectSoundExit();
    return msg.wParam;
}
複雑なコードに見えますが、ゲームフォルダ内のファイルを調べて画面解像度を決めた後DirectGraphic DirectInput DirectSoundを初期化しているだけです。
何がいけないのかわからず、質問させていただきました。

開発環境は、
WindowsXP SP3
DirectXSDK2010June
VisualStudioC++2010Express
ResEdit
です。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: Resourceからテクスチャを読み込めない

#2

投稿記事 by あたっしゅ » 3年前

Windows 10 Pro(64bit)
Visual Studio 2019 Community
でビルドしようとしましたが、できませんでした。

IDC_FULL 等の定義がありません。

プロジェクトを丸ごと .zip などして up してもらえると、吉。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

参照魚
記事: 109
登録日時: 6年前

Re: Resourceからテクスチャを読み込めない

#3

投稿記事 by 参照魚 » 3年前

テクスチャの設定を下記のようにすると(テクスチャが貼られていない)白いポリゴンが表示されますか?

m_pD3DDevice->SetTexture(0,g_pTexture01);

m_pD3DDevice->SetTexture(0,nullptr);

もしそれが表示されなければ、リソースの読み込みの前にポリゴンの設定の段階で問題があります。

返信

“C言語何でも質問掲示板” へ戻る