From c6ffd1ffcf918a80b02c293638b01b52e38a26b1 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 24 Jun 2013 14:42:40 +0000 Subject: [PATCH] build: fix the X360 port. --- src/gpu/framebuffer.cpp | 47 +++++++++++++++++++++++++++-------- src/gpu/indexbuffer.cpp | 8 ++++-- src/gpu/renderer.cpp | 2 +- src/gpu/shader.cpp | 10 +++++--- src/gpu/texture.cpp | 13 +++++++--- src/gpu/vertexbuffer.cpp | 12 ++++++--- src/platform/xbox/xboxapp.cpp | 2 +- 7 files changed, 68 insertions(+), 26 deletions(-) diff --git a/src/gpu/framebuffer.cpp b/src/gpu/framebuffer.cpp index a47d897a..7d3fa70d 100644 --- a/src/gpu/framebuffer.cpp +++ b/src/gpu/framebuffer.cpp @@ -19,6 +19,10 @@ # define FAR # define NEAR # include +#elif defined _XBOX +# include +# undef near /* Fuck Microsoft */ +# undef far /* Fuck Microsoft again */ #endif using namespace std; @@ -44,7 +48,7 @@ class FramebufferData IDirect3DTexture9 *m_texture; IDirect3DSurface9 *m_surface, *m_back_surface; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DTexture *m_texture; D3DSurface *m_surface, *m_back_surface; #else @@ -61,7 +65,7 @@ uint32_t FramebufferFormat::GetFormat() { switch (m_format) { -#if defined USE_D3D9 || defined _XBOX +#if defined USE_D3D9 case R_16_F: return D3DFMT_R16F; case R_32_F: return D3DFMT_R32F; case RG_16: @@ -80,6 +84,25 @@ uint32_t FramebufferFormat::GetFormat() case RGBA_16_UI: return D3DFMT_A16B16G16R16; case RGBA_16_F: return D3DFMT_A16B16G16R16F; case RGBA_32_F: return D3DFMT_A32B32G32R32F; +#elif defined _XBOX + case R_16_F: return D3DFMT_R16F; + case R_32_F: return D3DFMT_R32F; + case RG_16: + case RG_16_I: + case RG_16_UI: return D3DFMT_G16R16; + case RG_16_F: return D3DFMT_G16R16F; + case RG_32_F: return D3DFMT_G32R32F; + case RGB_8: + case RGB_8_I: + case RGB_8_UI: return D3DFMT_X8R8G8B8; + case RGBA_8: + case RGBA_8_I: + case RGBA_8_UI: return D3DFMT_A8R8G8B8; + case RGBA_16: + case RGBA_16_I: + case RGBA_16_UI: return D3DFMT_A16B16G16R16; + case RGBA_16_F: return D3DFMT_A16B16G16R16F; + case RGBA_32_F: return D3DFMT_A32B32G32R32F; #elif defined __CELLOS_LV2__ /* Supported drawable formats on the PS3: GL_ARGB_SCE, GL_RGB16F_ARB, * GL_RGBA16F_ARB, GL_RGB32F_ARB, GL_RGBA32F_ARB, GL_LUMINANCE32F_ARB. */ @@ -291,23 +314,25 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); if (FAILED(m_data->m_dev->CreateTexture(size.x, size.y, 1, - D3DUSAGE_RENDERTARGET, - (D3DFORMAT)fbo_format.GetFormat(), D3DPOOL_DEFAULT, - &m_data->m_texture, nullptr))) + D3DUSAGE_RENDERTARGET, + (D3DFORMAT)fbo_format.GetFormat(), + D3DPOOL_DEFAULT, + &m_data->m_texture, nullptr))) Abort(); if (FAILED(m_data->m_texture->GetSurfaceLevel(0, &m_data->m_surface))) Abort(); #elif defined _XBOX - m_data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); if (FAILED(m_data->m_dev->CreateTexture(size.x, size.y, 1, 0, - fbo_format.GetFormat(), D3DPOOL_DEFAULT, - &m_data->m_texture, nullptr))) + (D3DFORMAT)fbo_format.GetFormat(), + D3DPOOL_DEFAULT, + &m_data->m_texture, nullptr))) Abort(); if (FAILED(m_data->m_dev->CreateRenderTarget(size.x, size.y, - fbo_format.GetFormat(), - D3DMULTISAMPLE_NONE, 0, 0, - &m_data->m_surface, nullptr))) + (D3DFORMAT)fbo_format.GetFormat(), + D3DMULTISAMPLE_NONE, 0, 0, + &m_data->m_surface, nullptr))) Abort(); #else # if GL_VERSION_1_1 diff --git a/src/gpu/indexbuffer.cpp b/src/gpu/indexbuffer.cpp index f61e0ba8..c8b8b948 100644 --- a/src/gpu/indexbuffer.cpp +++ b/src/gpu/indexbuffer.cpp @@ -19,6 +19,10 @@ # define FAR # define NEAR # include +#elif defined _XBOX +# include +# undef near /* Fuck Microsoft */ +# undef far /* Fuck Microsoft again */ #endif using namespace std; @@ -41,7 +45,7 @@ class IndexBufferData IDirect3DDevice9 *m_dev; IDirect3DIndexBuffer9 *m_ibo; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DIndexBuffer *m_ibo; #else GLuint m_ibo; @@ -64,7 +68,7 @@ IndexBuffer::IndexBuffer(size_t size) # if defined USE_D3D9 m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); # elif defined _XBOX - m_data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); # endif if (FAILED(m_data->m_dev->CreateIndexBuffer(size, D3DUSAGE_WRITEONLY, diff --git a/src/gpu/renderer.cpp b/src/gpu/renderer.cpp index d5ffe221..085f002d 100644 --- a/src/gpu/renderer.cpp +++ b/src/gpu/renderer.cpp @@ -97,7 +97,7 @@ Renderer::Renderer(ivec2 size) XVIDEO_MODE VideoMode; XGetVideoMode(&VideoMode); size = lol::min(size, ivec2(VideoMode.dwDisplayWidth, - VideoMode.dwDisplayHeight); + VideoMode.dwDisplayHeight)); # endif D3DPRESENT_PARAMETERS d3dpp; memset(&d3dpp, 0, sizeof(d3dpp)); diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index 762f3e72..db0265e6 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -15,7 +15,7 @@ #include #include -#ifdef WIN32 +#if defined WIN32 && !defined _XBOX # define WIN32_LEAN_AND_MEAN # include # if defined USE_D3D9 @@ -25,6 +25,10 @@ # include # include # endif +#elif defined _XBOX +# include +# undef near /* Fuck Microsoft */ +# undef far /* Fuck Microsoft again */ #endif #include "core.h" @@ -50,7 +54,7 @@ private: IDirect3DPixelShader9 *frag_shader; ID3DXConstantTable *vert_table, *frag_table; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DVertexShader *vert_shader; D3DPixelShader *frag_shader; ID3DXConstantTable *vert_table, *frag_table; @@ -192,7 +196,7 @@ Shader::Shader(char const *vert, char const *frag) # if defined USE_D3D9 data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); # elif defined _XBOX - data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + data->m_dev = (D3DDevice *)g_renderer->GetDevice(); # endif hr = D3DXCompileShader(vert, (UINT)strlen(vert), macros, nullptr, "main", diff --git a/src/gpu/texture.cpp b/src/gpu/texture.cpp index c03ff417..cc3d7e6b 100644 --- a/src/gpu/texture.cpp +++ b/src/gpu/texture.cpp @@ -45,8 +45,11 @@ class TextureData D3DTEXTUREFILTERTYPE m_min_filter; D3DTEXTUREFILTERTYPE m_mip_filter; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DTexture *m_texture; + D3DTEXTUREFILTERTYPE m_mag_filter; + D3DTEXTUREFILTERTYPE m_min_filter; + D3DTEXTUREFILTERTYPE m_mip_filter; #else GLuint m_texture; GLint m_internal_format; @@ -74,7 +77,7 @@ Texture::Texture(ivec2 size, PixelFormat format) # if defined USE_D3D9 m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); # elif defined _XBOX - m_data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); # endif static struct @@ -297,8 +300,10 @@ void Texture::SetMinFiltering(TextureMinFilter filter) void Texture::GenerateMipmaps() { -#if defined _XBOX || defined USE_D3D9 - m_data->m_texture->GenerateMipSubLevels(); +#if defined USE_D3D9 + m_data->m_texture->->GenerateMipSubLevels(); +#elif defined _XBOX + /* FIXME: No direct mipmap generation support on X360 */ #elif defined __CELLOS_LV2__ glBindTexture(GL_TEXTURE_2D, m_data->m_texture); glGenerateMipmapOES(GL_TEXTURE_2D); diff --git a/src/gpu/vertexbuffer.cpp b/src/gpu/vertexbuffer.cpp index 19f0e41c..52686781 100644 --- a/src/gpu/vertexbuffer.cpp +++ b/src/gpu/vertexbuffer.cpp @@ -19,6 +19,10 @@ # define FAR # define NEAR # include +#elif defined _XBOX +# include +# undef near /* Fuck Microsoft */ +# undef far /* Fuck Microsoft again */ #endif using namespace std; @@ -42,7 +46,7 @@ class VertexBufferData IDirect3DDevice9 *m_dev; IDirect3DVertexBuffer9 *m_vbo; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DVertexBuffer *m_vbo; #else GLuint m_vbo; @@ -64,7 +68,7 @@ class VertexDeclarationData IDirect3DDevice9 *m_dev; IDirect3DVertexDeclaration9 *m_vdecl; #elif defined _XBOX - D3DDevice9 *m_dev; + D3DDevice *m_dev; D3DVertexDeclaration *m_vdecl; #else #endif @@ -564,7 +568,7 @@ void VertexDeclaration::Initialize() # if defined USE_D3D9 m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); # elif defined _XBOX - m_data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); # endif if (FAILED(m_data->m_dev->CreateVertexDeclaration(elements, @@ -647,7 +651,7 @@ VertexBuffer::VertexBuffer(size_t size) # if defined USE_D3D9 m_data->m_dev = (IDirect3DDevice9 *)g_renderer->GetDevice(); # elif defined _XBOX - m_data->m_dev = (D3DDevice9 *)g_renderer->GetDevice(); + m_data->m_dev = (D3DDevice *)g_renderer->GetDevice(); # endif if (FAILED(m_data->m_dev->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, nullptr, diff --git a/src/platform/xbox/xboxapp.cpp b/src/platform/xbox/xboxapp.cpp index 9ec253bd..05c8baa7 100644 --- a/src/platform/xbox/xboxapp.cpp +++ b/src/platform/xbox/xboxapp.cpp @@ -63,7 +63,7 @@ void XboxApp::Tick() Ticker::TickDraw(); #if defined _XBOX - D3DDevice9 *d3d_dev = (D3DDevice9 *)g_renderer->GetDevice(); + D3DDevice *d3d_dev = (D3DDevice *)g_renderer->GetDevice(); d3d_dev->Present(nullptr, nullptr, nullptr, nullptr); #endif }