1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#include <Windows.h>
#include <TriBase.h>
#include "Resource.h"struct SVertex
{
tbVector3 vPosition;
DWORD dwColor;static const DWORD dwFVF;
};
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;
SVertex g_aTriangleVertex[3];
float fTime;
tbConfig p_Config;
PDIRECT3DSTATEBLOCK9 p_pStateBlock;
tbDirect3D& D3D = tbDirect3D::Instance();
tbResult Init();
tbResult Exit();
tbResult Load();
tbResult Unload();tbResult Move(float fNumSecPassed);
tbResult Render(float fNumSecPassed);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,char* pcCommandLine, int iShowCommand)
{
tbResult r;
r = Init();if(r == TB_CANCELED)
{
return 0;
}
else if(r)
{
Exit();MessageBox(NULL, "Fehler beim Initialisieren des Spiels!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
return 1;
}
if(tbDoMessageLoop(Move, Render))
{TB_ERROR("Fehler in der Nachrichtenschleife!", TB_ERROR);
return 1;
}
Exit();return 0;
}
tbResult Init()
{
tbResult r;
if(tbInit()) return TB_ERROR;
r = tbDoConfigDialog(&p_Config);
if(r == TB_CANCELED) return TB_CANCELED;
else if(r) TB_ERROR("Engine konnte nicht initialisiert werden!", r);
if(Load()) TB_ERROR("Fehler beim laden des Spiels!", TB_ERROR);
return TB_OK;
}
tbResult Exit()
{
Unload();
tbExit();
return TB_OK;
}
tbResult Load()
{
tbMatrix mProjection;if(tbDirect3D::Instance().Init(&p_Config, "Fenster",
NULL, LoadIcon(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDI_ICON1))))
{TB_ERROR("Fehler beim Initialisieren von Direct3D", TB_ERROR);
}
tbDirect3D::Instance()->CreateStateBlock(D3DSBT_ALL, &p_pStateBlock);if(FAILED(D3D->SetFVF(SVertex::dwFVF)))
{return TB_ERROR;
}
D3D->SetRenderState(D3DRS_LIGHTING, FALSE);
D3D->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
D3D->SetRenderState(D3DRS_DITHERENABLE, TRUE);
mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f),
D3D.GetAspect(),
0.1f,
100.0f);
D3D->SetTransform(D3DTS_PROJECTION, (D3DMATRIX *)(&mProjection));
g_aTriangleVertex[0].vPosition = tbVector3(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[1].vPosition = tbVector3(1.0f, -1.0f, 0.0f);
g_aTriangleVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f);
g_aTriangleVertex[0].dwColor = tbColor(1.0f, 0.0f, 0.0f);
g_aTriangleVertex[1].dwColor = tbColor(0.0f, 1.0f, 0.0f);
g_aTriangleVertex[2].dwColor = tbColor(0.0f, 0.0f, 1.0f);
return TB_OK;
}
tbResult Unload()
{
TB_SAFE_RELEASE(p_pStateBlock);
tbDirect3D::Instance().Exit();
return TB_OK;
}tbResult Move(float fNumSecsPassed)
{
fTime += fNumSecsPassed;return TB_OK;
}tbResult Render(float fNumSecsPassed)
{
tbMatrix mRotation;
tbMatrix mTranslation;
tbMatrix mWorld;
mRotation = tbMatrixRotationY(TB_DEG_TO_RAD(fTime * 90.0f));
mTranslation = tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f));
mWorld = mRotation * mTranslation;
D3D.Instance().SetTransform(D3DTS_WORLD, mWorld);
D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 63), 1.0f, 0);
D3D->BeginScene();
D3D->DrawPrimitiveUP(D3DPT_TRIANGLELIST,
1,
g_aTriangleVertex,sizeof(SVertex));
D3D->EndScene();
D3D->Present(NULL, NULL, NULL, NULL);return TB_OK;
}
|