Помогите пожалуйста, не выводит текстуры на экран !?!?!?!?
Вот листинг:
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
LPDIRECT3D9 pDirect3D = NULL;
LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;
LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL;
LPDIRECT3DTEXTURE9 pTextura1 = NULL;
struct CUSTOMVERTEX
{
FLOAT x, y, z,rhw;;
FLOAT tu,tv;
};
HRESULT InitialDirect3D(HWND hwnd)
{
if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
D3DDISPLAYMODE Display;
if (FAILED(pDirect3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParametr;
ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));
Direct3DParametr.Windowed = FALSE;
Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
Direct3DParametr.BackBufferFormat = Display.Format;
Direct3DParametr.BackBufferWidth = 1024;//GetSystemMetrics(SM_CXSCREEN);
Direct3DParametr.BackBufferHeight = 768;//GetSystemMetrics(SM_CYSCREEN);
Direct3DParametr.BackBufferCount = 3;
Direct3DParametr.FullScreen_RefreshRateInHz = Display.RefreshRate;
if (FAILED(pDirect3D -> CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &Direct3DParametr, &pDirect3DDevice)))
return E_FAIL;
return S_OK;
}
HRESULT InitialBufferVershin()
{
CUSTOMVERTEX Vershin[] =
{
{1,1,0.0f, 1.0f, 0, 1},
{1,768,0.0f, 1.0f, 1, 1},
{1024, 0.0f, 1.0f, 0, },
{1,768,0.0f, 1.0f, 1, 0},
{1024,768,0.0f, 1.0f, 0, 0},
{1024, 1,0.0f, 1.0f, 1, 1},
};
D3DXCreateTextureFromFile(pDirect3DDevice, "text1.jpg", &pTextura1);
if (FAILED(pDirect3DDevice -> CreateVertexBuffer(6*sizeof(CUSTOMVERTEX), 0, D3DFVF_XYZRHW|D3DFVF_TEX1, D3DPOOL_DEFAULT, &pBufferVershin, NULL)))
return E_FAIL;
VOID* pBV;
if (FAILED(pBufferVershin -> Lock(0, sizeof(Vershin), (void**)&pBV, 0)))
return E_FAIL;
memcpy(pBV, Vershin, sizeof(Vershin));
pBufferVershin -> Unlock();
return S_OK;
}
VOID RenderingDirect3D()
{
InitialBufferVershin();
if (pDirect3DDevice == NULL)
return;
pDirect3DDevice -> Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(88,88,5), 1.0f,0);
pDirect3DDevice -> BeginScene();
pDirect3DDevice -> SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
pDirect3DDevice -> SetFVF(D3DFVF_XYZRHW|D3DFVF_TEX1);
pDirect3DDevice -> SetTexture(0, pTextura1);
pDirect3DDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
pDirect3DDevice -> EndScene();
pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);
}
VOID DeleteDirect3D()
{
if (pTextura1 != NULL)
pTextura1 -> Release();
if (pBufferVershin != NULL)
pBufferVershin -> Release();
if (pDirect3DDevice != NULL)
pDirect3DDevice -> Release();
if (pDirect3D != NULL)
pDirect3D -> Release();
}
LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch(msg)
{
case WM_KEYDOWN:
{
if (wparam == VK_ESCAPE)
PostQuitMessage(0);
return 0;
}
case WM_DESTROY:
{
DeleteDirect3D();
PostQuitMessage(0);
return(0);
}
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX windowsclass;
HWND hwnd;
MSG msg;
windowsclass.cbSize = sizeof(WNDCLASSEX);
windowsclass.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
windowsclass.lpfnWndProc = MainWinProc;
windowsclass.cbClsExtra = 0;
windowsclass.cbWndExtra = 0;
windowsclass.hInstance = hinstance;
windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
windowsclass.lpszMenuName = NULL;
windowsclass.lpszClassName = "WINDOWSCLASS";
windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&windowsclass))
return(0);
if (!(hwnd = CreateWindowEx(NULL,"WINDOWSCLASS","Direct3D",WS_OVERLAPPEDWINDOW|WS_VISIBLE,1,1,800,600,NULL,NULL,hinstance,NULL)))
return(0);
if (SUCCEEDED(InitialDirect3D(hwnd)))
{
if (SUCCEEDED(InitialBufferVershin()))
{
ShowWindow(hwnd, SW_SHOWDEFAULT);
UpdateWindow(hwnd);
ZeroMemory(&msg, sizeof(msg));
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
RenderingDirect3D();
}
}
}
return 0;
}
|