cannot used DirectX 10 because my video card only supports DX9, and there is no compatibility layer. DX11 has feature levels for older hardware so it would work with a DX9 card, but it's not available for WinXP.legacy
@@ -12,7 +12,7 @@ | |||||
# include "config.h" | # include "config.h" | ||||
#endif | #endif | ||||
#if !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if defined WIN32 && !_XBOX | #if defined WIN32 && !_XBOX | ||||
# define _USE_MATH_DEFINES /* for M_PI */ | # define _USE_MATH_DEFINES /* for M_PI */ | ||||
@@ -12,7 +12,7 @@ | |||||
# include "config.h" | # include "config.h" | ||||
#endif | #endif | ||||
#if !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if defined WIN32 | #if defined WIN32 | ||||
# define _USE_MATH_DEFINES /* for M_PI */ | # define _USE_MATH_DEFINES /* for M_PI */ | ||||
@@ -19,6 +19,10 @@ | |||||
#ifdef WIN32 | #ifdef WIN32 | ||||
# define WIN32_LEAN_AND_MEAN | # define WIN32_LEAN_AND_MEAN | ||||
# include <windows.h> | # include <windows.h> | ||||
# if defined USE_D3D9 | |||||
# include <d3d9.h> | |||||
# include <d3dx9shader.h> | |||||
# endif | |||||
#endif | #endif | ||||
#include "core.h" | #include "core.h" | ||||
@@ -26,6 +30,12 @@ | |||||
using namespace std; | using namespace std; | ||||
#if defined USE_D3D9 | |||||
extern IDirect3DDevice9 *g_d3ddevice; | |||||
#elif defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#endif | |||||
namespace lol | namespace lol | ||||
{ | { | ||||
@@ -38,7 +48,11 @@ class ShaderData | |||||
friend class Shader; | friend class Shader; | ||||
private: | private: | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 | |||||
IDirect3DVertexShader9 *vert_shader; | |||||
IDirect3DPixelShader9 *frag_shader; | |||||
ID3DXConstantTable *vert_table, *frag_table; | |||||
#elif defined _XBOX | |||||
D3DVertexShader *vert_shader; | D3DVertexShader *vert_shader; | ||||
D3DPixelShader *frag_shader; | D3DPixelShader *frag_shader; | ||||
ID3DXConstantTable *vert_table, *frag_table; | ID3DXConstantTable *vert_table, *frag_table; | ||||
@@ -92,8 +106,7 @@ void Shader::Destroy(Shader *shader) | |||||
Shader::Shader(char const *vert, char const *frag) | Shader::Shader(char const *vert, char const *frag) | ||||
: data(new ShaderData()) | : data(new ShaderData()) | ||||
{ | { | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
ID3DXBuffer *shader_code, *error_msg; | ID3DXBuffer *shader_code, *error_msg; | ||||
HRESULT hr; | HRESULT hr; | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
@@ -109,7 +122,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
/* Compile vertex shader */ | /* Compile vertex shader */ | ||||
data->vert_crc = Hash::Crc32(vert); | data->vert_crc = Hash::Crc32(vert); | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
hr = D3DXCompileShader(vert, (UINT)strlen(vert), NULL, NULL, "main", | hr = D3DXCompileShader(vert, (UINT)strlen(vert), NULL, NULL, "main", | ||||
"vs_2_0", 0, &shader_code, &error_msg, | "vs_2_0", 0, &shader_code, &error_msg, | ||||
&data->vert_table); | &data->vert_table); | ||||
@@ -148,7 +161,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
/* Compile fragment shader */ | /* Compile fragment shader */ | ||||
data->frag_crc = Hash::Crc32(frag); | data->frag_crc = Hash::Crc32(frag); | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
hr = D3DXCompileShader(frag, (UINT)strlen(frag), NULL, NULL, "main", | hr = D3DXCompileShader(frag, (UINT)strlen(frag), NULL, NULL, "main", | ||||
"ps_2_0", 0, &shader_code, &error_msg, | "ps_2_0", 0, &shader_code, &error_msg, | ||||
&data->frag_table); | &data->frag_table); | ||||
@@ -185,7 +198,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
} | } | ||||
#endif | #endif | ||||
#if !defined _XBOX && !defined __CELLOS_LV2__ | |||||
#if !defined USE_D3D9 && !defined _XBOX && !defined __CELLOS_LV2__ | |||||
/* Create program */ | /* Create program */ | ||||
data->prog_id = glCreateProgram(); | data->prog_id = glCreateProgram(); | ||||
glAttachShader(data->prog_id, data->vert_id); | glAttachShader(data->prog_id, data->vert_id); | ||||
@@ -198,7 +211,7 @@ Shader::Shader(char const *vert, char const *frag) | |||||
int Shader::GetAttribLocation(char const *attr) const | int Shader::GetAttribLocation(char const *attr) const | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
/* FIXME: do we have attribs? */ | /* FIXME: do we have attribs? */ | ||||
return 0; | return 0; | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
@@ -211,9 +224,9 @@ int Shader::GetAttribLocation(char const *attr) const | |||||
int Shader::GetUniformLocation(char const *uni) const | int Shader::GetUniformLocation(char const *uni) const | ||||
{ | { | ||||
#if defined _XBOX | |||||
D3DXHANDLE hr1 = data->frag_table->GetConstantByName(NULL, uni); | |||||
D3DXHANDLE hr2 = data->vert_table->GetConstantByName(NULL, uni); | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
UINT hr1 = (uintptr_t)data->frag_table->GetConstantByName(NULL, uni); | |||||
UINT hr2 = (uintptr_t)data->vert_table->GetConstantByName(NULL, uni); | |||||
return (int)(((uint32_t)hr1 << 16) | (uint32_t)hr2); | return (int)(((uint32_t)hr1 << 16) | (uint32_t)hr2); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
return glGetUniformLocation(data->prog_id, uni); | return glGetUniformLocation(data->prog_id, uni); | ||||
@@ -229,7 +242,7 @@ int Shader::GetUniformLocation(char const *uni) const | |||||
void Shader::SetUniform(int uni, float f) | void Shader::SetUniform(int uni, float f) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, vec4(f, 0, 0, 0)); | SetUniform(uni, vec4(f, 0, 0, 0)); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUniform1f(uni, f); | glUniform1f(uni, f); | ||||
@@ -240,7 +253,7 @@ void Shader::SetUniform(int uni, float f) | |||||
void Shader::SetUniform(int uni, vec2 const &v) | void Shader::SetUniform(int uni, vec2 const &v) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, vec4(v, 0, 0)); | SetUniform(uni, vec4(v, 0, 0)); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUniform2f(uni, v.x, v.y); | glUniform2f(uni, v.x, v.y); | ||||
@@ -251,7 +264,7 @@ void Shader::SetUniform(int uni, vec2 const &v) | |||||
void Shader::SetUniform(int uni, vec3 const &v) | void Shader::SetUniform(int uni, vec3 const &v) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
SetUniform(uni, vec4(v, 0)); | SetUniform(uni, vec4(v, 0)); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUniform3f(uni, v.x, v.y, v.z); | glUniform3f(uni, v.x, v.y, v.z); | ||||
@@ -263,10 +276,9 @@ void Shader::SetUniform(int uni, vec3 const &v) | |||||
void Shader::SetUniform(int uni, vec4 const &v) | void Shader::SetUniform(int uni, vec4 const &v) | ||||
{ | { | ||||
/* FIXME: use the array versions of these functions */ | /* FIXME: use the array versions of these functions */ | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
D3DXHANDLE hr1 = (uint32_t)uni >> 16; | |||||
D3DXHANDLE hr2 = (uint32_t)(uint16_t)uni; | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
UINT hr1 = (uint32_t)uni >> 16; | |||||
UINT hr2 = (uint32_t)(uint16_t)uni; | |||||
g_d3ddevice->SetPixelShaderConstantF(hr1, &v[0], 1); | g_d3ddevice->SetPixelShaderConstantF(hr1, &v[0], 1); | ||||
g_d3ddevice->SetVertexShaderConstantF(hr2, &v[0], 1); | g_d3ddevice->SetVertexShaderConstantF(hr2, &v[0], 1); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
@@ -278,10 +290,9 @@ void Shader::SetUniform(int uni, vec4 const &v) | |||||
void Shader::SetUniform(int uni, mat4 const &m) | void Shader::SetUniform(int uni, mat4 const &m) | ||||
{ | { | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
D3DXHANDLE hr1 = (uint32_t)uni >> 16; | |||||
D3DXHANDLE hr2 = (uint32_t)(uint16_t)uni; | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
UINT hr1 = (uint32_t)uni >> 16; | |||||
UINT hr2 = (uint32_t)(uint16_t)uni; | |||||
g_d3ddevice->SetPixelShaderConstantF(hr1, &m[0][0], 4); | g_d3ddevice->SetPixelShaderConstantF(hr1, &m[0][0], 4); | ||||
g_d3ddevice->SetVertexShaderConstantF(hr2, &m[0][0], 4); | g_d3ddevice->SetVertexShaderConstantF(hr2, &m[0][0], 4); | ||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
@@ -293,10 +304,10 @@ void Shader::SetUniform(int uni, mat4 const &m) | |||||
void Shader::Bind() const | void Shader::Bind() const | ||||
{ | { | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
g_d3ddevice->SetVertexShader(data->vert_shader); | |||||
g_d3ddevice->SetPixelShader(data->frag_shader); | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
HRESULT hr; | |||||
hr = g_d3ddevice->SetVertexShader(data->vert_shader); | |||||
hr = g_d3ddevice->SetPixelShader(data->frag_shader); | |||||
#elif !defined __CELLOS_LV2__ | #elif !defined __CELLOS_LV2__ | ||||
glUseProgram(data->prog_id); | glUseProgram(data->prog_id); | ||||
#else | #else | ||||
@@ -309,8 +320,7 @@ void Shader::Bind() const | |||||
Shader::~Shader() | Shader::~Shader() | ||||
{ | { | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
data->vert_shader->Release(); | data->vert_shader->Release(); | ||||
data->vert_table->Release(); | data->vert_table->Release(); | ||||
data->frag_shader->Release(); | data->frag_shader->Release(); | ||||
@@ -333,7 +343,7 @@ int ShaderData::GetVersion() | |||||
{ | { | ||||
static int version = 0; | static int version = 0; | ||||
#if !defined _XBOX && !defined __CELLOS_LV2__ | |||||
#if !defined USE_D3D9 && !defined _XBOX && !defined __CELLOS_LV2__ | |||||
if (!version) | if (!version) | ||||
{ | { | ||||
char buf[4096]; | char buf[4096]; | ||||
@@ -32,7 +32,7 @@ class GradientData | |||||
private: | private: | ||||
Shader *shader; | Shader *shader; | ||||
#if !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX /* This file is meaningless on Xbox */ | |||||
GLuint bufs[2]; | GLuint bufs[2]; | ||||
#if defined HAVE_GL_2X && !defined __APPLE__ | #if defined HAVE_GL_2X && !defined __APPLE__ | ||||
@@ -65,7 +65,7 @@ void Gradient::TickDraw(float deltams) | |||||
{ | { | ||||
Entity::TickDraw(deltams); | Entity::TickDraw(deltams); | ||||
#if !defined _XBOX /* This file is meaningless on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX /* This file is meaningless on Xbox */ | |||||
if (!data->shader) | if (!data->shader) | ||||
{ | { | ||||
#if !defined __CELLOS_LV2__ | #if !defined __CELLOS_LV2__ | ||||
@@ -14,6 +14,10 @@ | |||||
#if defined USE_SDL | #if defined USE_SDL | ||||
# include <SDL.h> | # include <SDL.h> | ||||
# if defined USE_D3D9 | |||||
# include <d3d9.h> | |||||
# include <SDL_syswm.h> | |||||
# endif | |||||
#endif | #endif | ||||
#include "core.h" | #include "core.h" | ||||
@@ -21,6 +25,10 @@ | |||||
#include "platform/sdl/sdlapp.h" | #include "platform/sdl/sdlapp.h" | ||||
#include "platform/sdl/sdlinput.h" | #include "platform/sdl/sdlinput.h" | ||||
#if defined USE_D3D9 | |||||
HWND g_hwnd = NULL; | |||||
#endif | |||||
namespace lol | namespace lol | ||||
{ | { | ||||
@@ -51,12 +59,20 @@ SdlApp::SdlApp(char const *title, ivec2 res, float fps) : | |||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
} | } | ||||
# if defined USE_D3D9 | |||||
SDL_Surface *video = SDL_SetVideoMode(res.x, res.y, 16, 0); | |||||
SDL_SysWMinfo wminfo; | |||||
SDL_VERSION(&wminfo.version); | |||||
SDL_GetWMInfo(&wminfo); | |||||
g_hwnd = wminfo.window; | |||||
# else | |||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); | SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); | ||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); | SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); | ||||
SDL_Surface *video = SDL_SetVideoMode(res.x, res.y, 0, SDL_OPENGL); | SDL_Surface *video = SDL_SetVideoMode(res.x, res.y, 0, SDL_OPENGL); | ||||
# endif | |||||
if (!video) | if (!video) | ||||
{ | { | ||||
Log::Error("cannot create OpenGL screen: %s\n", SDL_GetError()); | |||||
Log::Error("cannot create rendering window: %s\n", SDL_GetError()); | |||||
SDL_Quit(); | SDL_Quit(); | ||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
} | } | ||||
@@ -84,10 +100,19 @@ void SdlApp::Run() | |||||
{ | { | ||||
while (!Ticker::Finished()) | while (!Ticker::Finished()) | ||||
{ | { | ||||
#if defined USE_SDL && defined USE_D3D9 | |||||
extern IDirect3DDevice9 *g_d3ddevice; | |||||
g_d3ddevice->BeginScene(); | |||||
#endif | |||||
/* Tick the renderer, show the frame and clamp to desired framerate. */ | /* Tick the renderer, show the frame and clamp to desired framerate. */ | ||||
Ticker::TickDraw(); | Ticker::TickDraw(); | ||||
#if defined USE_SDL | #if defined USE_SDL | ||||
# if defined USE_D3D9 | |||||
g_d3ddevice->EndScene(); | |||||
g_d3ddevice->Present(NULL, NULL, NULL, NULL); | |||||
# else | |||||
SDL_GL_SwapBuffers(); | SDL_GL_SwapBuffers(); | ||||
# endif | |||||
#endif | #endif | ||||
} | } | ||||
} | } | ||||
@@ -60,7 +60,7 @@ private: | |||||
int ntiles; | int ntiles; | ||||
float angle; | float angle; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene not implemented") | ||||
@@ -90,7 +90,7 @@ Scene::Scene(float angle) | |||||
data->ntiles = 0; | data->ntiles = 0; | ||||
data->angle = angle; | data->angle = angle; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Scene() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Scene() not implemented") | ||||
@@ -108,7 +108,7 @@ Scene::Scene(float angle) | |||||
Scene::~Scene() | Scene::~Scene() | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::~Scene() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::~Scene() not implemented") | ||||
@@ -144,7 +144,7 @@ void Scene::Reset() | |||||
void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale) | void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale) | ||||
{ | { | ||||
#if !defined _XBOX /* No WPOS on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX | |||||
if ((data->ntiles % 1024) == 0) | if ((data->ntiles % 1024) == 0) | ||||
data->tiles = (Tile *)realloc(data->tiles, | data->tiles = (Tile *)realloc(data->tiles, | ||||
(data->ntiles + 1024) * sizeof(Tile)); | (data->ntiles + 1024) * sizeof(Tile)); | ||||
@@ -161,7 +161,7 @@ void Scene::AddTile(TileSet *tileset, int id, vec3 pos, int o, vec2 scale) | |||||
void Scene::Render() // XXX: rename to Blit() | void Scene::Render() // XXX: rename to Blit() | ||||
{ | { | ||||
#if !defined _XBOX /* No WPOS on Xbox */ | |||||
#if !defined USE_D3D9 && !defined _XBOX /* No WPOS on Xbox, what about Win32? */ | |||||
if (!stdshader) | if (!stdshader) | ||||
{ | { | ||||
#if !defined _XBOX && !defined __CELLOS_LV2__ | #if !defined _XBOX && !defined __CELLOS_LV2__ | ||||
@@ -343,7 +343,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
uni_mat = stdshader->GetUniformLocation("model_matrix"); | uni_mat = stdshader->GetUniformLocation("model_matrix"); | ||||
stdshader->SetUniform(uni_mat, data->model_matrix); | stdshader->SetUniform(uni_mat, data->model_matrix); | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | ||||
@@ -358,7 +358,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
//cgGLSetParameter1i((CGparameter)(intptr_t)uni_tex, 0); | //cgGLSetParameter1i((CGparameter)(intptr_t)uni_tex, 0); | ||||
#endif | #endif | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | ||||
@@ -380,7 +380,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
for (int buf = 0, i = 0, n; i < data->ntiles; i = n, buf += 2) | for (int buf = 0, i = 0, n; i < data->ntiles; i = n, buf += 2) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | ||||
@@ -422,7 +422,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
#if defined HAVE_GL_2X && !defined __APPLE__ | #if defined HAVE_GL_2X && !defined __APPLE__ | ||||
glBindVertexArray(data->vao); | glBindVertexArray(data->vao); | ||||
#endif | #endif | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | ||||
@@ -473,7 +473,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
data->tiles = 0; | data->tiles = 0; | ||||
data->ntiles = 0; | data->ntiles = 0; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Scene::Render() not implemented") | ||||
@@ -489,7 +489,7 @@ void Scene::Render() // XXX: rename to Blit() | |||||
#endif | #endif | ||||
glDisable(GL_BLEND); | glDisable(GL_BLEND); | ||||
#endif | #endif | ||||
#endif /* _XBOX */ | |||||
#endif /* _XBOX || USE_D3D9 */ | |||||
} | } | ||||
} /* namespace lol */ | } /* namespace lol */ | ||||
@@ -46,7 +46,7 @@ private: | |||||
float tx, ty; | float tx, ty; | ||||
Image *img; | Image *img; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet not implemented") | ||||
@@ -69,7 +69,7 @@ TileSet::TileSet(char const *path, ivec2 size, ivec2 count) | |||||
sprintf(data->name, "<tileset> %s", path); | sprintf(data->name, "<tileset> %s", path); | ||||
data->tiles = NULL; | data->tiles = NULL; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TileSet() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TileSet() not implemented") | ||||
@@ -118,7 +118,7 @@ void TileSet::TickDraw(float deltams) | |||||
{ | { | ||||
if (data->img) | if (data->img) | ||||
delete data->img; | delete data->img; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TickDraw() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TickDraw() not implemented") | ||||
@@ -131,7 +131,7 @@ void TileSet::TickDraw(float deltams) | |||||
} | } | ||||
else if (data->img) | else if (data->img) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TickDraw() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TickDraw() not implemented") | ||||
@@ -203,7 +203,7 @@ ivec2 TileSet::GetSize(int tileid) const | |||||
void TileSet::Bind() | void TileSet::Bind() | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::Bind() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::Bind() not implemented") | ||||
@@ -228,7 +228,7 @@ void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, | |||||
int dy = o ? 0 : data->size.y * scale.y; | int dy = o ? 0 : data->size.y * scale.y; | ||||
int dz = o ? data->size.y * scale.y : 0; | int dz = o ? data->size.y * scale.y : 0; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TileSet() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: TileSet::TileSet() not implemented") | ||||
@@ -14,7 +14,9 @@ | |||||
#include <cmath> | #include <cmath> | ||||
#if _XBOX | |||||
#if defined USE_D3D9 | |||||
# include <d3d9.h> | |||||
#elif defined _XBOX | |||||
# include <xtl.h> | # include <xtl.h> | ||||
# undef near /* Fuck Microsoft */ | # undef near /* Fuck Microsoft */ | ||||
# undef far /* Fuck Microsoft again */ | # undef far /* Fuck Microsoft again */ | ||||
@@ -30,8 +32,13 @@ | |||||
using namespace std; | using namespace std; | ||||
#if defined _XBOX | |||||
/* FIXME: g_d3ddevice should never be exported */ | /* FIXME: g_d3ddevice should never be exported */ | ||||
#if defined USE_D3D9 | |||||
IDirect3DDevice9 *g_d3ddevice; | |||||
# if defined USE_SDL | |||||
extern HWND g_hwnd; | |||||
# endif | |||||
#elif defined _XBOX | |||||
D3DDevice *g_d3ddevice; | D3DDevice *g_d3ddevice; | ||||
#endif | #endif | ||||
@@ -45,7 +52,11 @@ class VideoData | |||||
private: | private: | ||||
static mat4 proj_matrix, view_matrix; | static mat4 proj_matrix, view_matrix; | ||||
static ivec2 saved_viewport; | static ivec2 saved_viewport; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 | |||||
static IDirect3D9 *d3d_ctx; | |||||
static IDirect3DDevice9 *d3d_dev; | |||||
static D3DCOLOR clear_color; | |||||
#elif defined _XBOX | |||||
static Direct3D *d3d_ctx; | static Direct3D *d3d_ctx; | ||||
static D3DDevice *d3d_dev; | static D3DDevice *d3d_dev; | ||||
static D3DCOLOR clear_color; | static D3DCOLOR clear_color; | ||||
@@ -56,7 +67,11 @@ mat4 VideoData::proj_matrix; | |||||
mat4 VideoData::view_matrix; | mat4 VideoData::view_matrix; | ||||
ivec2 VideoData::saved_viewport(0, 0); | ivec2 VideoData::saved_viewport(0, 0); | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 | |||||
IDirect3D9 *VideoData::d3d_ctx; | |||||
IDirect3DDevice9 *VideoData::d3d_dev; | |||||
D3DCOLOR VideoData::clear_color; | |||||
#elif defined _XBOX | |||||
Direct3D *VideoData::d3d_ctx; | Direct3D *VideoData::d3d_ctx; | ||||
D3DDevice *VideoData::d3d_dev; | D3DDevice *VideoData::d3d_dev; | ||||
D3DCOLOR VideoData::clear_color; | D3DCOLOR VideoData::clear_color; | ||||
@@ -68,7 +83,7 @@ D3DCOLOR VideoData::clear_color; | |||||
void Video::Setup(ivec2 size) | void Video::Setup(ivec2 size) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
VideoData::d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); | VideoData::d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); | ||||
if (!VideoData::d3d_ctx) | if (!VideoData::d3d_ctx) | ||||
{ | { | ||||
@@ -76,15 +91,22 @@ void Video::Setup(ivec2 size) | |||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
} | } | ||||
HWND window = 0; | |||||
D3DPRESENT_PARAMETERS d3dpp; | D3DPRESENT_PARAMETERS d3dpp; | ||||
memset(&d3dpp, 0, sizeof(d3dpp)); | memset(&d3dpp, 0, sizeof(d3dpp)); | ||||
# if defined USE_SDL | |||||
window = g_hwnd; | |||||
d3dpp.hDeviceWindow = g_hwnd; | |||||
d3dpp.Windowed = TRUE; | |||||
# elif defined _XBOX | |||||
XVIDEO_MODE VideoMode; | XVIDEO_MODE VideoMode; | ||||
XGetVideoMode( &VideoMode ); | XGetVideoMode( &VideoMode ); | ||||
if (size.x > VideoMode.dwDisplayWidth) | if (size.x > VideoMode.dwDisplayWidth) | ||||
size.x = VideoMode.dwDisplayWidth; | size.x = VideoMode.dwDisplayWidth; | ||||
if (size.y > VideoMode.dwDisplayHeight) | if (size.y > VideoMode.dwDisplayHeight) | ||||
size.y = VideoMode.dwDisplayHeight; | size.y = VideoMode.dwDisplayHeight; | ||||
# endif | |||||
VideoData::saved_viewport = size; | VideoData::saved_viewport = size; | ||||
VideoData::clear_color = D3DCOLOR_XRGB(26, 51, 77); | VideoData::clear_color = D3DCOLOR_XRGB(26, 51, 77); | ||||
@@ -98,9 +120,10 @@ void Video::Setup(ivec2 size) | |||||
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; | d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; | ||||
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; | d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; | ||||
if (FAILED(VideoData::d3d_ctx->CreateDevice(0, D3DDEVTYPE_HAL, NULL, | |||||
D3DCREATE_HARDWARE_VERTEXPROCESSING, | |||||
&d3dpp, &VideoData::d3d_dev))) | |||||
HRESULT hr = VideoData::d3d_ctx->CreateDevice(0, D3DDEVTYPE_HAL, window, | |||||
D3DCREATE_HARDWARE_VERTEXPROCESSING, | |||||
&d3dpp, &VideoData::d3d_dev); | |||||
if (FAILED(hr)) | |||||
{ | { | ||||
Log::Error("cannot create D3D device\n"); | Log::Error("cannot create D3D device\n"); | ||||
exit(EXIT_FAILURE); | exit(EXIT_FAILURE); | ||||
@@ -177,7 +200,7 @@ void Video::SetFov(float theta) | |||||
void Video::SetDepth(bool set) | void Video::SetDepth(bool set) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
# define STR0(x) #x | # define STR0(x) #x | ||||
# define STR(x) STR0(x) | # define STR(x) STR0(x) | ||||
# pragma message(__FILE__ "(" STR(__LINE__) "): warning: Video::SetDepth() not implemented") | # pragma message(__FILE__ "(" STR(__LINE__) "): warning: Video::SetDepth() not implemented") | ||||
@@ -191,7 +214,7 @@ void Video::SetDepth(bool set) | |||||
void Video::SetClearColor(vec4 color) | void Video::SetClearColor(vec4 color) | ||||
{ | { | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
VideoData::clear_color = D3DCOLOR_XRGB((int)(color.r * 255.999f), | VideoData::clear_color = D3DCOLOR_XRGB((int)(color.r * 255.999f), | ||||
(int)(color.g * 255.999f), | (int)(color.g * 255.999f), | ||||
(int)(color.b * 255.999f)); | (int)(color.b * 255.999f)); | ||||
@@ -203,7 +226,7 @@ void Video::SetClearColor(vec4 color) | |||||
void Video::Clear() | void Video::Clear() | ||||
{ | { | ||||
ivec2 size = GetSize(); | ivec2 size = GetSize(); | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
VideoData::d3d_dev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | VideoData::d3d_dev->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER | ||||
| D3DCLEAR_STENCIL, | | D3DCLEAR_STENCIL, | ||||
VideoData::clear_color, 1.0f, 0); | VideoData::clear_color, 1.0f, 0); | ||||
@@ -222,7 +245,7 @@ void Video::Destroy() | |||||
void Video::Capture(uint32_t *buffer) | void Video::Capture(uint32_t *buffer) | ||||
{ | { | ||||
#if _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
/* TODO */ | /* TODO */ | ||||
#else | #else | ||||
GLint v[4]; | GLint v[4]; | ||||
@@ -258,7 +281,7 @@ void Video::Capture(uint32_t *buffer) | |||||
ivec2 Video::GetSize() | ivec2 Video::GetSize() | ||||
{ | { | ||||
#if _XBOX | |||||
#if defined USE_D3D9 || defined _XBOX | |||||
return VideoData::saved_viewport; | return VideoData::saved_viewport; | ||||
#elif 1 | #elif 1 | ||||
/* GetSize() is called too often on the game thread; we cannot rely on | /* GetSize() is called too often on the game thread; we cannot rely on | ||||
@@ -19,6 +19,12 @@ | |||||
using namespace std; | using namespace std; | ||||
using namespace lol; | using namespace lol; | ||||
#if defined _WIN32 && defined USE_D3D9 | |||||
# define FAR | |||||
# define NEAR | |||||
# include <d3d9.h> | |||||
#endif | |||||
#if USE_SDL && defined __APPLE__ | #if USE_SDL && defined __APPLE__ | ||||
# include <SDL_main.h> | # include <SDL_main.h> | ||||
#endif | #endif | ||||
@@ -32,6 +38,12 @@ using namespace lol; | |||||
# include <direct.h> | # include <direct.h> | ||||
#endif | #endif | ||||
#if defined USE_D3D9 | |||||
extern IDirect3DDevice9 *g_d3ddevice; | |||||
#elif defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#endif | |||||
class Triangle : public WorldEntity | class Triangle : public WorldEntity | ||||
{ | { | ||||
public: | public: | ||||
@@ -50,7 +62,7 @@ public: | |||||
if (!m_ready) | if (!m_ready) | ||||
{ | { | ||||
m_shader = Shader::Create( | m_shader = Shader::Create( | ||||
#if !defined __CELLOS_LV2__ && !defined _XBOX | |||||
#if !defined __CELLOS_LV2__ && !defined _XBOX && !defined USE_D3D9 | |||||
"#version 120\n" | "#version 120\n" | ||||
"attribute vec2 in_Position;" | "attribute vec2 in_Position;" | ||||
"void main(void) {" | "void main(void) {" | ||||
@@ -72,21 +84,20 @@ public: | |||||
"}" | "}" | ||||
#endif | #endif | ||||
); | ); | ||||
#if !defined _XBOX | |||||
#if !defined _XBOX && !defined USE_D3D9 | |||||
m_attrib = m_shader->GetAttribLocation("in_Position"); | m_attrib = m_shader->GetAttribLocation("in_Position"); | ||||
#endif | #endif | ||||
m_ready = true; | m_ready = true; | ||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 | |||||
/* Method 1: store vertex buffer on the GPU memory */ | /* Method 1: store vertex buffer on the GPU memory */ | ||||
glGenBuffers(1, &m_vbo); | glGenBuffers(1, &m_vbo); | ||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | ||||
glBufferData(GL_ARRAY_BUFFER, sizeof(m_vertices), m_vertices, | glBufferData(GL_ARRAY_BUFFER, sizeof(m_vertices), m_vertices, | ||||
GL_STATIC_DRAW); | GL_STATIC_DRAW); | ||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX | |||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 | |||||
/* Method 2: upload vertex information at each frame */ | /* Method 2: upload vertex information at each frame */ | ||||
#elif defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#elif defined _XBOX || defined USE_D3D9 | |||||
D3DVERTEXELEMENT9 const elements[2] = | D3DVERTEXELEMENT9 const elements[2] = | ||||
{ | { | ||||
{ 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | { 0, 0, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | ||||
@@ -108,8 +119,7 @@ public: | |||||
} | } | ||||
m_shader->Bind(); | m_shader->Bind(); | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#if defined _XBOX || defined USE_D3D9 | |||||
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | ||||
g_d3ddevice->SetVertexDeclaration(m_vdecl); | g_d3ddevice->SetVertexDeclaration(m_vdecl); | ||||
g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | ||||
@@ -126,13 +136,13 @@ public: | |||||
glVertexPointer(3, GL_FLOAT, 0, m_vertices); | glVertexPointer(3, GL_FLOAT, 0, m_vertices); | ||||
#endif | #endif | ||||
#if defined _XBOX | |||||
g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); | |||||
#if defined _XBOX || defined USE_D3D9 | |||||
g_d3ddevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 3); | |||||
#else | #else | ||||
glDrawArrays(GL_TRIANGLES, 0, 3); | glDrawArrays(GL_TRIANGLES, 0, 3); | ||||
#endif | #endif | ||||
#if defined _XBOX | |||||
#if defined _XBOX || defined USE_D3D9 | |||||
/* FIXME: do we need to unset anything here? */ | /* FIXME: do we need to unset anything here? */ | ||||
#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | #elif !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ | ||||
glDisableVertexAttribArray(m_attrib); | glDisableVertexAttribArray(m_attrib); | ||||
@@ -148,7 +158,10 @@ public: | |||||
private: | private: | ||||
vec2 m_vertices[3]; | vec2 m_vertices[3]; | ||||
Shader *m_shader; | Shader *m_shader; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 | |||||
IDirect3DVertexDeclaration9 *m_vdecl; | |||||
IDirect3DVertexBuffer9 *m_vbo; | |||||
#elif defined _XBOX | |||||
D3DVertexDeclaration *m_vdecl; | D3DVertexDeclaration *m_vdecl; | ||||
D3DVertexBuffer *m_vbo; | D3DVertexBuffer *m_vbo; | ||||
#else | #else | ||||
@@ -19,6 +19,12 @@ | |||||
using namespace std; | using namespace std; | ||||
using namespace lol; | using namespace lol; | ||||
#if defined _WIN32 && defined USE_D3D9 | |||||
# define FAR | |||||
# define NEAR | |||||
# include <d3d9.h> | |||||
#endif | |||||
#if USE_SDL && defined __APPLE__ | #if USE_SDL && defined __APPLE__ | ||||
# include <SDL_main.h> | # include <SDL_main.h> | ||||
#endif | #endif | ||||
@@ -28,6 +34,12 @@ using namespace lol; | |||||
# include <direct.h> | # include <direct.h> | ||||
#endif | #endif | ||||
#if defined USE_D3D9 | |||||
extern IDirect3DDevice9 *g_d3ddevice; | |||||
#elif defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#endif | |||||
class Cube : public WorldEntity | class Cube : public WorldEntity | ||||
{ | { | ||||
public: | public: | ||||
@@ -92,7 +104,7 @@ public: | |||||
if (!m_ready) | if (!m_ready) | ||||
{ | { | ||||
m_shader = Shader::Create( | m_shader = Shader::Create( | ||||
#if !defined __CELLOS_LV2__ && !defined _XBOX | |||||
#if !defined __CELLOS_LV2__ && !defined _XBOX && !defined USE_D3D9 | |||||
"#version 120\n" | "#version 120\n" | ||||
"attribute vec3 in_Vertex;" | "attribute vec3 in_Vertex;" | ||||
"attribute vec3 in_Color;" | "attribute vec3 in_Color;" | ||||
@@ -126,14 +138,14 @@ public: | |||||
"}" | "}" | ||||
#endif | #endif | ||||
); | ); | ||||
#if !defined _XBOX | |||||
#if !defined _XBOX && !defined USE_D3D9 | |||||
m_coord = m_shader->GetAttribLocation("in_Vertex"); | m_coord = m_shader->GetAttribLocation("in_Vertex"); | ||||
m_color = m_shader->GetAttribLocation("in_Color"); | m_color = m_shader->GetAttribLocation("in_Color"); | ||||
#endif | #endif | ||||
m_mvp = m_shader->GetUniformLocation("in_Matrix"); | m_mvp = m_shader->GetUniformLocation("in_Matrix"); | ||||
m_ready = true; | m_ready = true; | ||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX | |||||
#if !defined __CELLOS_LV2__ && !defined __ANDROID__ && !defined __APPLE__ && !defined _XBOX && !defined USE_D3D9 | |||||
/* Method 1: store vertex buffer on the GPU memory */ | /* Method 1: store vertex buffer on the GPU memory */ | ||||
glGenBuffers(1, &m_vbo); | glGenBuffers(1, &m_vbo); | ||||
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | glBindBuffer(GL_ARRAY_BUFFER, m_vbo); | ||||
@@ -147,8 +159,7 @@ public: | |||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo); | glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo); | ||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(m_indices), m_indices, | glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(m_indices), m_indices, | ||||
GL_STATIC_DRAW); | GL_STATIC_DRAW); | ||||
#elif defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#elif defined _XBOX || defined USE_D3D9 | |||||
D3DVERTEXELEMENT9 const elements[] = | D3DVERTEXELEMENT9 const elements[] = | ||||
{ | { | ||||
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, | ||||
@@ -191,8 +202,7 @@ public: | |||||
m_shader->Bind(); | m_shader->Bind(); | ||||
m_shader->SetUniform(m_mvp, m_matrix); | m_shader->SetUniform(m_mvp, m_matrix); | ||||
#if defined _XBOX | |||||
extern D3DDevice *g_d3ddevice; | |||||
#if defined _XBOX || defined USE_D3D9 | |||||
g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | g_d3ddevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); | ||||
g_d3ddevice->SetVertexDeclaration(m_vdecl); | g_d3ddevice->SetVertexDeclaration(m_vdecl); | ||||
g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | g_d3ddevice->SetStreamSource(0, m_vbo, 0, sizeof(*m_vertices)); | ||||
@@ -232,7 +242,11 @@ private: | |||||
vec3 m_colors[8]; | vec3 m_colors[8]; | ||||
i16vec3 m_indices[12]; | i16vec3 m_indices[12]; | ||||
Shader *m_shader; | Shader *m_shader; | ||||
#if defined _XBOX | |||||
#if defined USE_D3D9 | |||||
IDirect3DVertexDeclaration9 *m_vdecl; | |||||
IDirect3DVertexBuffer9 *m_vbo, *m_cbo; | |||||
IDirect3DIndexBuffer9 *m_ibo; | |||||
#elif defined _XBOX | |||||
D3DVertexDeclaration *m_vdecl; | D3DVertexDeclaration *m_vdecl; | ||||
D3DVertexBuffer *m_vbo, *m_cbo; | D3DVertexBuffer *m_vbo, *m_cbo; | ||||
D3DIndexBuffer *m_ibo; | D3DIndexBuffer *m_ibo; | ||||
@@ -10,7 +10,7 @@ | |||||
<MultiProcessorCompilation>true</MultiProcessorCompilation> | <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
<FloatingPointModel>Fast</FloatingPointModel> | <FloatingPointModel>Fast</FloatingPointModel> | ||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | <AdditionalIncludeDirectories>$(SolutionDir)\..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
<AdditionalIncludeDirectories Condition="'$(Platform)'=='Win32'">$(GlIncludes);$(SdlIncludes);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
<AdditionalIncludeDirectories Condition="'$(Platform)'=='Win32'">$(GlIncludes);$(SdlIncludes);$(D3d9Includes);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
<PreprocessorDefinitions Condition="'$(Platform)'=='Win32'">WIN32;$(Win32Defines);%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions Condition="'$(Platform)'=='Win32'">WIN32;$(Win32Defines);%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
<PreprocessorDefinitions Condition="'$(Platform)'=='Xbox 360'">_XBOX;$(XboxDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions Condition="'$(Platform)'=='Xbox 360'">_XBOX;$(XboxDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
<BufferSecurityCheck Condition="'$(Platform)'=='Xbox 360'">false</BufferSecurityCheck> | <BufferSecurityCheck Condition="'$(Platform)'=='Xbox 360'">false</BufferSecurityCheck> | ||||
@@ -32,8 +32,8 @@ | |||||
<Link> | <Link> | ||||
<GenerateDebugInformation>true</GenerateDebugInformation> | <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
<!-- FIXME: not for the static library! --> | <!-- FIXME: not for the static library! --> | ||||
<AdditionalDependencies Condition="'$(Platform)'=='Win32'">kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;$(SdlDeps);$(GdiDeps);$(GlDeps);%(AdditionalDependencies)</AdditionalDependencies> | |||||
<AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(SdlLibs);$(GlLibs);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | |||||
<AdditionalDependencies Condition="'$(Platform)'=='Win32'">kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;$(SdlDeps);$(GdiDeps);$(GlDeps);$(D3d9Deps);%(AdditionalDependencies)</AdditionalDependencies> | |||||
<AdditionalLibraryDirectories Condition="'$(Platform)'=='Win32'">$(SdlLibs);$(GlLibs);$(D3d9Libs);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | |||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Xbox 360'">xapilibd.lib;d3d9d.lib;d3dx9d.lib;xgraphicsd.lib;xboxkrnl.lib;xnetd.lib;xaudiod2.lib;xactd3.lib;x3daudiod.lib;xmcored.lib;xbdm.lib;vcompd.lib;%(AdditionalDependencies)</AdditionalDependencies> | <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Debug|Xbox 360'">xapilibd.lib;d3d9d.lib;d3dx9d.lib;xgraphicsd.lib;xboxkrnl.lib;xnetd.lib;xaudiod2.lib;xactd3.lib;x3daudiod.lib;xmcored.lib;xbdm.lib;vcompd.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
<AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Xbox 360'">xapilib.lib;d3d9.lib;d3dx9.lib;xgraphics.lib;xboxkrnl.lib;xnet.lib;xaudio2.lib;xact3.lib;x3daudio.lib;xmcore.lib;vcomp.lib;%(AdditionalDependencies)</AdditionalDependencies> | <AdditionalDependencies Condition="'$(Configuration)|$(Platform)'=='Release|Xbox 360'">xapilib.lib;d3d9.lib;d3dx9.lib;xgraphics.lib;xboxkrnl.lib;xnet.lib;xaudio2.lib;xact3.lib;x3daudio.lib;xmcore.lib;vcomp.lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
</Link> | </Link> | ||||
@@ -3,45 +3,64 @@ | |||||
<ImportGroup Label="PropertySheets" /> | <ImportGroup Label="PropertySheets" /> | ||||
<PropertyGroup Label="UserMacros"> | <PropertyGroup Label="UserMacros"> | ||||
<ContribDir>$(SolutionDir)\..\contrib</ContribDir> | <ContribDir>$(SolutionDir)\..\contrib</ContribDir> | ||||
<GlewDir>$(ContribDir)\glew-1.7.0</GlewDir> | |||||
<GtkDir>$(ContribDir)\gtk-2.22.1</GtkDir> | |||||
<GtkGlDir>$(ContribDir)\gtkglarea-2.0.1</GtkGlDir> | |||||
<!-- SDL --> | |||||
<SdlDir>$(ContribDir)\sdl-1.2.14</SdlDir> | <SdlDir>$(ContribDir)\sdl-1.2.14</SdlDir> | ||||
<SdlImageDir>$(ContribDir)\sdl-image-1.2.10</SdlImageDir> | <SdlImageDir>$(ContribDir)\sdl-image-1.2.10</SdlImageDir> | ||||
<SdlMixerDir>$(ContribDir)\sdl-mixer-1.2.11</SdlMixerDir> | <SdlMixerDir>$(ContribDir)\sdl-mixer-1.2.11</SdlMixerDir> | ||||
<GlIncludes>$(GlewDir)\include\GL</GlIncludes> | |||||
<GtkIncludes>$(GtkDir)\lib\glib-2.0\include;$(GtkDir)\lib\gtk-2.0\include;$(GtkDir)\include\glib-2.0;$(GtkDir)\include\gtk-2.0;$(GtkDir)\include\cairo;$(GtkDir)\include\pango-1.0;$(GtkDir)\include\gdk-pixbuf-2.0;$(GtkDir)\include\atk-1.0;$(GtkGlDir)\include</GtkIncludes> | |||||
<SdlIncludes>$(SdlDir)\include;$(SdlImageDir)\include;$(SdlMixerDir)\include</SdlIncludes> | <SdlIncludes>$(SdlDir)\include;$(SdlImageDir)\include;$(SdlMixerDir)\include</SdlIncludes> | ||||
<GlLibs>$(GlewDir)\lib\i686-w64-mingw32</GlLibs> | |||||
<GtkLibs>$(GtkDir)\lib;$(GtkDir)\bin;$(GtkGlDir)\lib</GtkLibs> | |||||
<SdlLibs>$(SdlDir)\lib\i686-w64-mingw32;$(SdlImageDir)\lib\i686-w64-mingw32;$(SdlMixerDir)\lib\i686-w64-mingw32</SdlLibs> | <SdlLibs>$(SdlDir)\lib\i686-w64-mingw32;$(SdlImageDir)\lib\i686-w64-mingw32;$(SdlMixerDir)\lib\i686-w64-mingw32</SdlLibs> | ||||
<SdlDeps>SDL.lib;SDLmain.lib;SDL_image.lib;SDL_mixer.lib</SdlDeps> | |||||
<!-- GTK+ & GtkGl --> | |||||
<GtkDir>$(ContribDir)\gtk-2.22.1</GtkDir> | |||||
<GtkGlDir>$(ContribDir)\gtkglarea-2.0.1</GtkGlDir> | |||||
<GtkIncludes>$(GtkDir)\lib\glib-2.0\include;$(GtkDir)\lib\gtk-2.0\include;$(GtkDir)\include\glib-2.0;$(GtkDir)\include\gtk-2.0;$(GtkDir)\include\cairo;$(GtkDir)\include\pango-1.0;$(GtkDir)\include\gdk-pixbuf-2.0;$(GtkDir)\include\atk-1.0;$(GtkGlDir)\include</GtkIncludes> | |||||
<GtkLibs>$(GtkDir)\lib;$(GtkDir)\bin;$(GtkGlDir)\lib</GtkLibs> | |||||
<GtkDeps>gobject-2.0.lib;gthread-2.0.lib;glib-2.0.lib;gdk-win32-2.0.lib;gtk-win32-2.0.lib;gtkgl-2.0.lib</GtkDeps> | |||||
<!-- GDI+ --> | |||||
<GdiDeps>Gdiplus.lib</GdiDeps> | <GdiDeps>Gdiplus.lib</GdiDeps> | ||||
<!-- OpenGL & GLEW --> | |||||
<GlewDir>$(ContribDir)\glew-1.7.0</GlewDir> | |||||
<GlIncludes>$(GlewDir)\include\GL</GlIncludes> | |||||
<GlLibs>$(GlewDir)\lib\i686-w64-mingw32</GlLibs> | |||||
<GlDeps>opengl32.lib;glew32.lib</GlDeps> | <GlDeps>opengl32.lib;glew32.lib</GlDeps> | ||||
<GtkDeps>gobject-2.0.lib;gthread-2.0.lib;glib-2.0.lib;gdk-win32-2.0.lib;gtk-win32-2.0.lib;gtkgl-2.0.lib</GtkDeps> | |||||
<SdlDeps>SDL.lib;SDLmain.lib;SDL_image.lib;SDL_mixer.lib</SdlDeps> | |||||
<Win32Defines>USE_GLEW;GLEW_STATIC;HAVE_SDL_H;USE_SDL;USE_GDIPLUS</Win32Defines> | |||||
<!-- Direct3D 9 --> | |||||
<D3d9Includes>$(DXSDK_DIR)\Include</D3d9Includes> | |||||
<D3d9Libs Condition="'$(Platform)'=='Win32'">$(DXSDK_DIR)\Lib\x86</D3d9Libs> | |||||
<D3d9Libs Condition="'$(Platform)'=='Win64'">$(DXSDK_DIR)\Lib\x64</D3d9Libs> | |||||
<D3d9Deps Condition="'$(Configuration)'=='Release'">d3d9.lib;d3dx9.lib</D3d9Deps> | |||||
<D3d9Deps Condition="'$(Configuration)'=='Debug'">d3d9.lib;d3dx9d.lib</D3d9Deps> | |||||
<Win32Defines>HAVE_SDL_H;USE_SDL;USE_GDIPLUS;USE_D3D9</Win32Defines> | |||||
<XboxDefines></XboxDefines> | <XboxDefines></XboxDefines> | ||||
</PropertyGroup> | </PropertyGroup> | ||||
<PropertyGroup /> | <PropertyGroup /> | ||||
<ItemDefinitionGroup /> | <ItemDefinitionGroup /> | ||||
<ItemGroup> | <ItemGroup> | ||||
<BuildMacro Include="ContribDir"><Value>$(ContribDir)</Value></BuildMacro> | <BuildMacro Include="ContribDir"><Value>$(ContribDir)</Value></BuildMacro> | ||||
<BuildMacro Include="GlewDir"><Value>$(GlewDir)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkDir"><Value>$(GtkDir)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkGlDir"><Value>$(GtkGlDir)</Value></BuildMacro> | |||||
<BuildMacro Include="SdlDir"><Value>$(SdlDir)</Value></BuildMacro> | <BuildMacro Include="SdlDir"><Value>$(SdlDir)</Value></BuildMacro> | ||||
<BuildMacro Include="SdlImageDir"><Value>$(SdlImageDir)</Value></BuildMacro> | <BuildMacro Include="SdlImageDir"><Value>$(SdlImageDir)</Value></BuildMacro> | ||||
<BuildMacro Include="SdlMixerDir"><Value>$(SdlMixerDir)</Value></BuildMacro> | <BuildMacro Include="SdlMixerDir"><Value>$(SdlMixerDir)</Value></BuildMacro> | ||||
<BuildMacro Include="GlIncludes"><Value>$(GlIncludes)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkIncludes"><Value>$(GtkIncludes)</Value></BuildMacro> | |||||
<BuildMacro Include="SdlIncludes"><Value>$(SdlIncludes)</Value></BuildMacro> | <BuildMacro Include="SdlIncludes"><Value>$(SdlIncludes)</Value></BuildMacro> | ||||
<BuildMacro Include="GlLibs"><Value>$(GlLibs)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkLibs"><Value>$(GtkLibs)</Value></BuildMacro> | |||||
<BuildMacro Include="SdlLibs"><Value>$(SdlLibs)</Value></BuildMacro> | <BuildMacro Include="SdlLibs"><Value>$(SdlLibs)</Value></BuildMacro> | ||||
<BuildMacro Include="SdlDeps"><Value>$(SdlDeps)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkDir"><Value>$(GtkDir)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkGlDir"><Value>$(GtkGlDir)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkIncludes"><Value>$(GtkIncludes)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkLibs"><Value>$(GtkLibs)</Value></BuildMacro> | |||||
<BuildMacro Include="GtkDeps"><Value>$(GtkDeps)</Value></BuildMacro> | |||||
<BuildMacro Include="GdiDeps"><Value>$(GdiDeps)</Value></BuildMacro> | <BuildMacro Include="GdiDeps"><Value>$(GdiDeps)</Value></BuildMacro> | ||||
<BuildMacro Include="GlewDir"><Value>$(GlewDir)</Value></BuildMacro> | |||||
<BuildMacro Include="GlIncludes"><Value>$(GlIncludes)</Value></BuildMacro> | |||||
<BuildMacro Include="GlLibs"><Value>$(GlLibs)</Value></BuildMacro> | |||||
<BuildMacro Include="GlDeps"><Value>$(GlDeps)</Value></BuildMacro> | <BuildMacro Include="GlDeps"><Value>$(GlDeps)</Value></BuildMacro> | ||||
<BuildMacro Include="GtkDeps"><Value>$(GtkDeps)</Value></BuildMacro> | |||||
<BuildMacro Include="SdlDeps"><Value>$(SdlDeps)</Value></BuildMacro> | |||||
<BuildMacro Include="D3d9Includes"><Value>$(D3d9Includes)</Value></BuildMacro> | |||||
<BuildMacro Include="D3d9Libs"><Value>$(D3d9Libs)</Value></BuildMacro> | |||||
<BuildMacro Include="D3d9Deps"><Value>$(D3d9Deps)</Value></BuildMacro> | |||||
<BuildMacro Include="Win32Defines"><Value>$(Win32Defines)</Value></BuildMacro> | <BuildMacro Include="Win32Defines"><Value>$(Win32Defines)</Value></BuildMacro> | ||||
<BuildMacro Include="XboxDefines"><Value>$(XboxDefines)</Value></BuildMacro> | <BuildMacro Include="XboxDefines"><Value>$(XboxDefines)</Value></BuildMacro> | ||||
</ItemGroup> | </ItemGroup> | ||||