diff --git a/build/msbuild/config-build.xml b/build/msbuild/config-build.xml index 5bab9443..4dbf2fe9 100644 --- a/build/msbuild/config-build.xml +++ b/build/msbuild/config-build.xml @@ -6,9 +6,6 @@ - - true - true diff --git a/build/msbuild/lol.rules.props b/build/msbuild/lol.rules.props index a2da6bd5..5832d0e7 100644 --- a/build/msbuild/lol.rules.props +++ b/build/msbuild/lol.rules.props @@ -16,8 +16,8 @@ $(IntDir)/%(Directory)/ $(SolutionDir)\..\src;$(SolutionDir)\..\src\bullet;$(SolutionDir)\..\tools\lolunit;$(PegtlIncludes);$(ImguiIncludes);$(BtPhysIncludes);%(AdditionalIncludeDirectories) - $(GlIncludes);$(SdlIncludes);$(FfmpegIncludes);$(AssimpIncludes);$(D3d9Includes);$(XinputIncludes);%(AdditionalIncludeDirectories) - $(GlIncludes);$(SdlIncludes);$(FfmpegIncludes);$(AssimpIncludes);$(D3d9Includes);$(XinputIncludes);%(AdditionalIncludeDirectories) + $(GlIncludes);$(SdlIncludes);$(FfmpegIncludes);$(AssimpIncludes);$(XinputIncludes);%(AdditionalIncludeDirectories) + $(GlIncludes);$(SdlIncludes);$(FfmpegIncludes);$(AssimpIncludes);$(XinputIncludes);%(AdditionalIncludeDirectories) NOMINMAX;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - 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);$(FfmpegDeps);$(AssimpDeps);$(LibGccDeps);$(GdiDeps);$(XinputDeps);%(AdditionalDependencies) - $(GlDeps);%(AdditionalDependencies) - $(D3d9Deps);%(AdditionalDependencies) + 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);$(FfmpegDeps);$(AssimpDeps);$(LibGccDeps);$(GdiDeps);$(XinputDeps);$(GlDeps);%(AdditionalDependencies) %(AdditionalDependencies) $(LibGccLibs);%(AdditionalLibraryDirectories) $(SdlLibs);%(AdditionalLibraryDirectories) $(FfmpegLibs);%(AdditionalLibraryDirectories) $(AssimpLibs);%(AdditionalLibraryDirectories) $(GlLibs);%(AdditionalLibraryDirectories) - $(D3d9Libs);%(AdditionalLibraryDirectories) $(XinputLibs);%(AdditionalLibraryDirectories) %(AdditionalLibraryDirectories) $(OrbisLibs);%(AdditionalLibraryDirectories) diff --git a/build/msbuild/lol.vars.props b/build/msbuild/lol.vars.props index beb563fa..190d8680 100644 --- a/build/msbuild/lol.vars.props +++ b/build/msbuild/lol.vars.props @@ -76,15 +76,7 @@ $(GlewDir)\lib\x86_64-w64-mingw32 opengl32.lib;glew32s.lib opengl32.lib;glew32s.lib - HAVE_GL_2X;USE_GLEW;GLEW_STATIC;$(Win32Defines) - - - $(DXSDK_DIR)\Include - $(DXSDK_DIR)\Lib\x86 - $(DXSDK_DIR)\Lib\x64 - d3d9.lib;d3dx9.lib - d3d9.lib;d3dx9d.lib - USE_D3D9;$(Win32Defines) + HAVE_GL_2X;USE_GLEW;GLEW_STATIC;$(Win32Defines) $(DXSDK_DIR)\Include @@ -144,9 +136,6 @@ $(GlIncludes) $(GlLibs) $(GlDeps) - $(D3d9Includes) - $(D3d9Libs) - $(D3d9Deps) $(XinputIncludes) $(XinputLibs) $(XinputDeps) diff --git a/configure.ac b/configure.ac index 4c8bf170..b72f7515 100644 --- a/configure.ac +++ b/configure.ac @@ -273,16 +273,6 @@ LOL_TRY_LDFLAGS(-framework CoreData, LOL_TRY_LDFLAGS(-framework UIKit, [LOL_LIBS="${LOL_LIBS} -framework UIKit"]) - -dnl Are we on a Direct3D 9 platform? -#ac_cv_my_have_d3d9="no" -#AC_CHECK_HEADERS(d3d9.h, [ac_cv_my_have_d3d9="yes"]) -#if test "${ac_cv_my_have_d3d9}" != "no"; then -# D3D_LIBS="${D3D_LIBS} -ld3d9 -ld3dx9 -lxinput" -# AC_DEFINE(USE_D3D9, 1, Define to 1 to use DirectX 9) -#fi -#AM_CONDITIONAL(USE_D3D9, test "${ac_cv_my_have_d3d9}" != "no") - LOL_CHECK_OPENGL LOL_CHECK_SDL diff --git a/src/gpu/framebuffer.cpp b/src/gpu/framebuffer.cpp index 23097efc..ab261ea2 100644 --- a/src/gpu/framebuffer.cpp +++ b/src/gpu/framebuffer.cpp @@ -12,12 +12,6 @@ #include "lolgl.h" -#if defined _WIN32 && defined USE_D3D9 -# define FAR -# define NEAR -# include -#endif - namespace lol { @@ -34,13 +28,7 @@ class FramebufferData ivec2 m_size; bool m_bound; -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DTexture9 *m_texture; - IDirect3DSurface9 *m_surface, *m_back_surface; -#else GLuint m_fbo, m_texture, m_depth; -#endif }; // @@ -52,26 +40,7 @@ uint32_t FramebufferFormat::GetFormat() { switch (m_format) { -#if defined USE_D3D9 - 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_R8G8B8; - 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 HAVE_GLES_2X +#if defined HAVE_GLES_2X /* FIXME: incomplete */ case RGBA_8: case RGBA_8_I: @@ -203,9 +172,7 @@ uint32_t FramebufferFormat::GetFormatOrder() { switch (m_format) { -#if defined USE_D3D9 - /* FIXME: not implemented at all */ -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X /* FIXME: incomplete */ case R_8: case RG_8: case RGB_8: case RGBA_8: case R_8_I: case RG_8_I: case RGB_8_I: case RGBA_8_I: @@ -276,42 +243,30 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) { m_data->m_size = size; m_data->m_bound = false; -#if defined USE_D3D9 - m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->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))) - Abort(); - if (FAILED(m_data->m_texture->GetSurfaceLevel(0, &m_data->m_surface))) - Abort(); -#else -# if GL_VERSION_1_1 +#if GL_VERSION_1_1 GLenum internal_format = fbo_format.GetFormat(); GLenum format = fbo_format.GetFormatOrder(); GLenum depth = GL_DEPTH_COMPONENT; -# elif GL_ES_VERSION_2_0 +#elif GL_ES_VERSION_2_0 /* In OpenGL ES, internal format and format must match. */ GLenum internal_format = fbo_format.GetFormat(); GLenum format = fbo_format.GetFormat(); GLenum depth = GL_DEPTH_COMPONENT16; /* for WebGL */ -# else +#else /* In OpenGL ES, internal format and format must match. */ GLenum internal_format = fbo_format.GetFormat(); GLenum format = fbo_format.GetFormat(); -# endif +#endif GLenum wrapmode = GL_CLAMP_TO_EDGE; GLenum filtering = GL_LINEAR; -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glGenFramebuffers(1, &m_data->m_fbo); glBindFramebuffer(GL_FRAMEBUFFER, m_data->m_fbo); -# else +#else glGenFramebuffersOES(1, &m_data->m_fbo); glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_data->m_fbo); -# endif +#endif glGenTextures(1, &m_data->m_texture); glActiveTexture(GL_TEXTURE0); @@ -323,16 +278,16 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) glTexImage2D(GL_TEXTURE_2D, 0, internal_format, size.x, size.y, 0, format, GL_UNSIGNED_BYTE, nullptr); -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_data->m_texture, 0); -# else +#else glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_data->m_texture, 0); -# endif +#endif m_data->m_depth = GL_INVALID_ENUM; -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 if (depth != GL_INVALID_ENUM) { /* XXX: might not work on GL ES, see @@ -344,40 +299,34 @@ Framebuffer::Framebuffer(ivec2 size, FramebufferFormat fbo_format) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_data->m_depth); } -# endif +#endif glBindTexture(GL_TEXTURE_2D, 0); -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); ASSERT(status == GL_FRAMEBUFFER_COMPLETE, "invalid framebuffer status 0x%x", status); -# endif +#endif -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glBindFramebuffer(GL_FRAMEBUFFER, 0); -# else +#else glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); -# endif #endif } Framebuffer::~Framebuffer() { -#if defined USE_D3D9 - m_data->m_surface->Release(); - m_data->m_texture->Release(); -#else -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glDeleteFramebuffers(1, &m_data->m_fbo); -# else +#else glDeleteFramebuffersOES(1, &m_data->m_fbo); -# endif +#endif glDeleteTextures(1, &m_data->m_texture); -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 if (m_data->m_depth != GL_INVALID_ENUM) glDeleteRenderbuffers(1, &m_data->m_depth); -# endif #endif delete m_data; } @@ -385,11 +334,7 @@ Framebuffer::~Framebuffer() TextureUniform Framebuffer::GetTextureUniform() const { TextureUniform ret; -#if defined USE_D3D9 - ret.m_flags = (uint64_t)(uintptr_t)m_data->m_texture; -#else ret.m_flags = m_data->m_texture; -#endif return ret; } @@ -402,14 +347,10 @@ Image Framebuffer::GetImage() const { Image ret(m_data->m_size); -#if defined USE_D3D9 - /* TODO: implement D3D Framebuffer::GetImage() */ -#else u8vec4 *buffer = ret.Lock(); glReadPixels(0, 0, m_data->m_size.x, m_data->m_size.y, GL_RGBA, GL_UNSIGNED_BYTE, buffer); ret.Unlock(buffer); -#endif return ret; } @@ -418,17 +359,10 @@ void Framebuffer::Bind() { ASSERT(!m_data->m_bound, "trying to bind an already bound framebuffer"); -#if defined USE_D3D9 - if (FAILED(m_data->m_dev->GetRenderTarget(0, &m_data->m_back_surface))) - Abort(); - if (FAILED(m_data->m_dev->SetRenderTarget(0, m_data->m_surface))) - Abort(); -#else -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glBindFramebuffer(GL_FRAMEBUFFER, m_data->m_fbo); -# else +#else glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_data->m_fbo); -# endif #endif /* FIXME: this should be done in the RenderContext object @@ -443,16 +377,10 @@ void Framebuffer::Unbind() { ASSERT(m_data->m_bound, "trying to unbind an unbound framebuffer"); -#if defined USE_D3D9 - if (FAILED(m_data->m_dev->SetRenderTarget(0, m_data->m_back_surface))) - Abort(); - m_data->m_back_surface->Release(); -#else -# if GL_VERSION_1_1 || GL_ES_VERSION_2_0 +#if GL_VERSION_1_1 || GL_ES_VERSION_2_0 glBindFramebuffer(GL_FRAMEBUFFER, 0); -# else +#else glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0); -# endif #endif Renderer::Get()->SetViewport(m_data->m_saved_viewport); diff --git a/src/gpu/indexbuffer.cpp b/src/gpu/indexbuffer.cpp index a68fc166..bec3de37 100644 --- a/src/gpu/indexbuffer.cpp +++ b/src/gpu/indexbuffer.cpp @@ -12,12 +12,6 @@ #include "lolgl.h" -#if defined _WIN32 && defined USE_D3D9 -# define FAR -# define NEAR -# include -#endif - namespace lol { @@ -31,14 +25,8 @@ class IndexBufferData friend class IndexBuffer; size_t m_size; - -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DIndexBuffer9 *m_ibo; -#else GLuint m_ibo; uint8_t *m_memory; -#endif }; // @@ -52,29 +40,16 @@ IndexBuffer::IndexBuffer(size_t size) m_data->m_size = size; if (!size) return; -#if defined USE_D3D9 - m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - if (FAILED(m_data->m_dev->CreateIndexBuffer(size, D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, D3DPOOL_MANAGED, - &m_data->m_ibo, nullptr))) - Abort(); -#else glGenBuffers(1, &m_data->m_ibo); m_data->m_memory = new uint8_t[size]; -#endif } IndexBuffer::~IndexBuffer() { if (m_data->m_size) { -#if defined USE_D3D9 - if (FAILED(m_data->m_ibo->Release())) - Abort(); -#else glDeleteBuffers(1, &m_data->m_ibo); delete[] m_data->m_memory; -#endif } delete m_data; } @@ -89,15 +64,8 @@ void *IndexBuffer::Lock(size_t offset, size_t size) if (!m_data->m_size) return nullptr; -#if defined USE_D3D9 - void *ret; - if (FAILED(m_data->m_ibo->Lock(offset, size, (void **)&ret, 0))) - Abort(); - return ret; -#else UNUSED(size); return m_data->m_memory + offset; -#endif } void IndexBuffer::Unlock() @@ -105,14 +73,9 @@ void IndexBuffer::Unlock() if (!m_data->m_size) return; -#if defined USE_D3D9 - if (FAILED(m_data->m_ibo->Unlock())) - Abort(); -#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_data->m_ibo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_data->m_size, m_data->m_memory, GL_STATIC_DRAW); -#endif } void IndexBuffer::Bind() @@ -120,15 +83,10 @@ void IndexBuffer::Bind() if (!m_data->m_size) return; -#if defined USE_D3D9 - if (FAILED(m_data->m_dev->SetIndices(m_data->m_ibo))) - Abort(); -#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_data->m_ibo); /* XXX: not necessary because we kept track of the size */ //int size; //glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size); -#endif } void IndexBuffer::Unbind() @@ -136,12 +94,7 @@ void IndexBuffer::Unbind() if (!m_data->m_size) return; -#if defined USE_D3D9 - if (FAILED(m_data->m_dev->SetIndices(nullptr))) - Abort(); -#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -#endif } } /* namespace lol */ diff --git a/src/gpu/renderer.cpp b/src/gpu/renderer.cpp index ab7d952b..ed91121f 100644 --- a/src/gpu/renderer.cpp +++ b/src/gpu/renderer.cpp @@ -15,9 +15,6 @@ #include #if defined _WIN32 -# if defined USE_D3D9 -# include -# endif # define WIN32_LEAN_AND_MEAN 1 # include # undef WIN32_LEAN_AND_MEAN @@ -27,11 +24,6 @@ #include "lolgl.h" -/* FIXME: find a way to pass g_hwnd from the windowing system */ -#if defined USE_D3D9 -extern HWND g_hwnd; -#endif - namespace lol { @@ -62,12 +54,6 @@ private: DepthMask m_depth_mask; CullMode m_cull_mode; PolygonMode m_polygon_mode; - -private: -#if defined USE_D3D9 - IDirect3D9 *m_d3d_ctx; - IDirect3DDevice9 *m_d3d_dev; -#endif }; /* @@ -77,42 +63,7 @@ private: Renderer::Renderer(ivec2 size) : m_data(new RendererData()) { -#if defined USE_D3D9 - /* Create Direct3D context */ - m_data->m_d3d_ctx = Direct3DCreate9(D3D_SDK_VERSION); - if (!m_data->m_d3d_ctx) - { - msg::error("cannot initialise D3D\n"); - exit(EXIT_FAILURE); - } - - /* Create Direct3D device */ - D3DPRESENT_PARAMETERS d3dpp; - memset(&d3dpp, 0, sizeof(d3dpp)); - d3dpp.BackBufferWidth = size.x; - d3dpp.BackBufferHeight = size.y; - d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; - d3dpp.BackBufferCount = 1; - d3dpp.hDeviceWindow = g_hwnd; -# if USE_SDL || USE_OLD_SDL - d3dpp.Windowed = TRUE; -# endif - d3dpp.EnableAutoDepthStencil = TRUE; - d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8; - d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; - d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE; - - HRESULT hr = m_data->m_d3d_ctx->CreateDevice(0, D3DDEVTYPE_HAL, g_hwnd, - D3DCREATE_HARDWARE_VERTEXPROCESSING, - &d3dpp, &m_data->m_d3d_dev); - if (FAILED(hr)) - { - msg::error("cannot create D3D device\n"); - exit(EXIT_FAILURE); - } - -#else -# if defined USE_GLEW && !defined __APPLE__ +#if defined USE_GLEW && !defined __APPLE__ /* Initialise GLEW if necessary */ GLenum glerr = glewInit(); if (glerr != GLEW_OK) @@ -120,7 +71,6 @@ Renderer::Renderer(ivec2 size) msg::error("cannot initialise GLEW: %s\n", glewGetErrorString(glerr)); exit(EXIT_FAILURE); } -# endif #endif /* Initialise rendering states */ @@ -158,12 +108,8 @@ Renderer::Renderer(ivec2 size) SetPolygonMode(PolygonMode::Fill); /* Add some rendering states that we don't export to the user */ -#if defined USE_D3D9 - /* TODO */ -#else -# if defined HAVE_GL_2X && !defined __APPLE__ +#if defined HAVE_GL_2X && !defined __APPLE__ glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); -# endif #endif } @@ -172,37 +118,12 @@ Renderer::~Renderer() delete m_data; } -void *Renderer::GetDevice() -{ -#if defined USE_D3D9 - return m_data->m_d3d_dev; -#else - return nullptr; -#endif -} - /* * Buffer clearing */ void Renderer::Clear(ClearMask mask) { -#if defined USE_D3D9 - int m = 0; - if (mask & ClearMask::Color) - m |= D3DCLEAR_TARGET; - if (mask & ClearMask::Depth) - m |= D3DCLEAR_ZBUFFER; - if (mask & ClearMask::Stencil) - m |= D3DCLEAR_STENCIL; - - vec3 tmp = 255.999f * GetClearColor().rgb; - D3DCOLOR clear_color = D3DCOLOR_XRGB((int)tmp.r, (int)tmp.g, (int)tmp.b); - - if (FAILED(m_data->m_d3d_dev->Clear(0, nullptr, m, clear_color, - GetClearDepth(), 0))) - Abort(); -#else GLbitfield m = 0; if (mask & ClearMask::Color) m |= GL_COLOR_BUFFER_BIT; @@ -211,7 +132,6 @@ void Renderer::Clear(ClearMask mask) if (mask & ClearMask::Stencil) m |= GL_STENCIL_BUFFER_BIT; glClear(m); -#endif } /* @@ -249,14 +169,7 @@ void Renderer::SetViewport(ibox2 viewport) if (m_data->m_viewport == viewport) return; -#if defined USE_D3D9 - D3DVIEWPORT9 vp = { viewport.aa.x, viewport.aa.y, - viewport.bb.x, viewport.bb.y, - 0.0f, 1.0f }; - m_data->m_d3d_dev->SetViewport(&vp); -#else glViewport(viewport.aa.x, viewport.aa.y, viewport.bb.x, viewport.bb.y); -#endif m_data->m_viewport = viewport; } @@ -287,11 +200,7 @@ void Renderer::SetClearColor(vec4 color) if (m_data->m_clear_color == color) return; -#if defined USE_D3D9 - /* Nothing to do */ -#else glClearColor(color.r, color.g, color.b, color.a); -#endif m_data->m_clear_color = color; } @@ -310,9 +219,7 @@ void Renderer::SetClearDepth(float depth) if (m_data->m_clear_depth == depth) return; -#if defined USE_D3D9 - /* Nothing to do */ -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X glClearDepthf(depth); #else glClearDepth(depth); @@ -335,48 +242,7 @@ void Renderer::SetAlphaFunc(AlphaFunc func, float alpha) if (m_data->m_alpha_func == func && m_data->m_alpha_value == alpha) return; -#if defined USE_D3D9 - switch (func) - { - case AlphaFunc::Disabled: - break; /* Nothing to do */ - case AlphaFunc::Never: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NEVER); - break; - case AlphaFunc::Less: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_LESS); - break; - case AlphaFunc::Equal: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_EQUAL); - break; - case AlphaFunc::LessOrEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_LESSEQUAL); - break; - case AlphaFunc::Greater: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER); - break; - case AlphaFunc::NotEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NOTEQUAL); - break; - case AlphaFunc::GreaterOrEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL); - break; - case AlphaFunc::Always: - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_ALWAYS); - break; - } - - if (func == AlphaFunc::Disabled) - { - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); - } - else - { - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHAREF, - (DWORD)(alpha * 255.999f)); - } -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X /* not supported */ #elif defined GL_VERSION_1_1 switch (func) @@ -432,30 +298,6 @@ void Renderer::SetBlendEquation(BlendEquation rgb, BlendEquation alpha) if (m_data->m_blend_rgb == rgb && m_data->m_blend_alpha == alpha) return; -#if defined USE_D3D9 - D3DBLEND s1[2] = { D3DBLENDOP_ADD, D3DBLENDOP_ADD }; - BlendEquation s2[2] = { rgb, alpha }; - - for (int i = 0; i < 2; ++i) - { - switch (s2[i]) - { - case BlendEquation::Add: - s1[i] = D3DBLENDOP_ADD; break; - case BlendEquation::Subtract: - s1[i] = D3DBLENDOP_SUBTRACT; break; - case BlendEquation::ReverseSubtract: - s1[i] = D3DBLENDOP_REVSUBTRACT; break; - case BlendEquation::Min: - s1[i] = D3DBLENDOP_MIN; break; - case BlendEquation::Max: - s1[i] = D3DBLENDOP_MAX; break; - } - } - - m_data->m_d3d_dev->SetRenderState(D3DRS_BLENDOP, s1[0]); - m_data->m_d3d_dev->SetRenderState(D3DRS_BLENDOPALPHA, s1[1]); -#else GLenum s1[2] = { GL_FUNC_ADD, GL_FUNC_ADD }; BlendEquation s2[2] = { rgb, alpha }; @@ -484,7 +326,6 @@ void Renderer::SetBlendEquation(BlendEquation rgb, BlendEquation alpha) } glBlendEquationSeparate(s1[0], s1[1]); -#endif m_data->m_blend_rgb = rgb; m_data->m_blend_alpha = alpha; @@ -509,63 +350,6 @@ void Renderer::SetBlendFunc(BlendFunc src, BlendFunc dst) if (m_data->m_blend_src == src && m_data->m_blend_dst == dst) return; -#if defined USE_D3D9 - D3DBLEND s1[2] = { D3DBLEND_ONE, D3DBLEND_ZERO }; - BlendFunc s2[2] = { src, dst }; - - for (int i = 0; i < 2; ++i) - { - switch (s2[i]) - { - case BlendFunc::Disabled: - break; /* Nothing to do */ - case BlendFunc::Zero: - s1[i] = D3DBLEND_ZERO; break; - case BlendFunc::One: - s1[i] = D3DBLEND_ONE; break; - case BlendFunc::SrcColor: - s1[i] = D3DBLEND_SRCCOLOR; break; - case BlendFunc::OneMinusSrcColor: - s1[i] = D3DBLEND_INVSRCCOLOR; break; - case BlendFunc::DstColor: - s1[i] = D3DBLEND_DESTCOLOR; break; - case BlendFunc::OneMinusDstColor: - s1[i] = D3DBLEND_INVDESTCOLOR; break; - case BlendFunc::SrcAlpha: - s1[i] = D3DBLEND_SRCALPHA; break; - case BlendFunc::OneMinusSrcAlpha: - s1[i] = D3DBLEND_INVSRCALPHA; break; - case BlendFunc::DstAlpha: - s1[i] = D3DBLEND_DESTALPHA; break; - case BlendFunc::OneMinusDstAlpha: - s1[i] = D3DBLEND_INVDESTALPHA; break; - /* FiXME: these can be supported using D3DPBLENDCAPS_BLENDFACTOR */ - case BlendFunc::ConstantColor: - ASSERT(0, "BlendFunc::ConstantColor not supported"); - break; - case BlendFunc::OneMinusConstantColor: - ASSERT(0, "BlendFunc::OneMinusConstantColor not supported"); - break; - case BlendFunc::ConstantAlpha: - ASSERT(0, "BlendFunc::ConstantAlpha not supported"); - break; - case BlendFunc::OneMinusConstantAlpha: - ASSERT(0, "BlendFunc::OneMinusConstantAlpha not supported"); - break; - } - } - - if (src == BlendFunc::Disabled) - { - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHABLENDENABLE, 0); - } - else - { - m_data->m_d3d_dev->SetRenderState(D3DRS_ALPHABLENDENABLE, 1); - m_data->m_d3d_dev->SetRenderState(D3DRS_SRCBLEND, s1[0]); - m_data->m_d3d_dev->SetRenderState(D3DRS_DESTBLEND, s1[1]); - } -#else GLenum s1[2] = { GL_ONE, GL_ZERO }; BlendFunc s2[2] = { src, dst }; @@ -615,7 +399,6 @@ void Renderer::SetBlendFunc(BlendFunc src, BlendFunc dst) glEnable(GL_BLEND); glBlendFunc(s1[0], s1[1]); } -#endif m_data->m_blend_src = src; m_data->m_blend_dst = dst; @@ -640,42 +423,6 @@ void Renderer::SetDepthFunc(DepthFunc func) if (m_data->m_depth_func == func) return; -#if defined USE_D3D9 - switch (func) - { - case DepthFunc::Disabled: - break; /* Nothing to do */ - case DepthFunc::Never: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER); - break; - case DepthFunc::Less: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); - break; - case DepthFunc::Equal: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_EQUAL); - break; - case DepthFunc::LessOrEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); - break; - case DepthFunc::Greater: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_GREATER); - break; - case DepthFunc::NotEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_NOTEQUAL); - break; - case DepthFunc::GreaterOrEqual: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_GREATEREQUAL); - break; - case DepthFunc::Always: - m_data->m_d3d_dev->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS); - break; - } - - if (func == DepthFunc::Disabled) - m_data->m_d3d_dev->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); - else - m_data->m_d3d_dev->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); -#else switch (func) { case DepthFunc::Disabled: @@ -702,7 +449,6 @@ void Renderer::SetDepthFunc(DepthFunc func) glDisable(GL_DEPTH_TEST); else glEnable(GL_DEPTH_TEST); -#endif m_data->m_depth_func = func; } @@ -721,17 +467,10 @@ void Renderer::SetDepthMask(DepthMask mask) if (m_data->m_depth_mask == mask) return; -#if defined USE_D3D9 - if (mask == DepthMask::Disabled) - m_data->m_d3d_dev->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_FALSE); - else - m_data->m_d3d_dev->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); -#else if (mask == DepthMask::Disabled) glDepthMask(GL_FALSE); else glDepthMask(GL_TRUE); -#endif m_data->m_depth_mask = mask; } @@ -750,20 +489,6 @@ void Renderer::SetCullMode(CullMode mode) if (m_data->m_cull_mode == mode) return; -#if defined USE_D3D9 - switch (mode) - { - case CullMode::Disabled: - m_data->m_d3d_dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - break; - case CullMode::Clockwise: - m_data->m_d3d_dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); - break; - case CullMode::CounterClockwise: - m_data->m_d3d_dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); - break; - } -#else switch (mode) { case CullMode::Disabled: @@ -780,7 +505,6 @@ void Renderer::SetCullMode(CullMode mode) glFrontFace(GL_CCW); break; } -#endif m_data->m_cull_mode = mode; } @@ -799,20 +523,7 @@ void Renderer::SetPolygonMode(PolygonMode mode) if (m_data->m_polygon_mode == mode) return; -#if defined USE_D3D9 - switch (mode) - { - case PolygonMode::Point: - m_data->m_d3d_dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_POINT); - break; - case PolygonMode::Line: - m_data->m_d3d_dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); - break; - case PolygonMode::Fill: - m_data->m_d3d_dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - break; - } -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X /* not supported */ #elif defined GL_VERSION_1_1 switch (mode) diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index ddcb7363..ef1f90af 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -19,13 +19,6 @@ # define WIN32_LEAN_AND_MEAN 1 # include # undef WIN32_LEAN_AND_MEAN -# if defined USE_D3D9 -# include - using std::min; - using std::max; -# include -# include -# endif #endif #include "pegtl.hh" @@ -82,17 +75,10 @@ class ShaderData private: String m_name; -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DVertexShader9 *vert_shader; - IDirect3DPixelShader9 *frag_shader; - ID3DXConstantTable *vert_table, *frag_table; -#else GLuint prog_id, vert_id, frag_id; // Benlitz: using a simple array could be faster since there is never more than a few attribute locations to store map attrib_locations; map attrib_errors; -#endif uint32_t vert_crc, frag_crc; /* Shader patcher */ @@ -238,39 +224,15 @@ Shader::Shader(String const &name, { data->m_name = name; -#if defined USE_D3D9 - ID3DXBuffer *shader_code, *error_msg; - HRESULT hr; - D3DXMACRO macros[] = - { - { "LOL_TEST_MACRO", "1" }, - { nullptr, nullptr } - }; -#else char errbuf[4096]; String shader_code; GLchar const *gl_code; GLint status; GLsizei len; -#endif /* Compile vertex shader */ data->vert_crc = ShaderData::Hash(vert); -#if defined USE_D3D9 - data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - hr = D3DXCompileShader(vert, (UINT)strlen(vert), macros, nullptr, "main", - "vs_3_0", 0, &shader_code, &error_msg, - &data->vert_table); - if (FAILED(hr)) - { - msg::error("failed to compile vertex shader %s: %s\n", name.C(), - error_msg ? error_msg->GetBufferPointer() : "error"); - msg::error("shader source:\n%s\n", vert); - } - data->m_dev->CreateVertexShader((DWORD *)shader_code->GetBufferPointer(), - &data->vert_shader); - shader_code->Release(); -#else + shader_code = ShaderData::Patch(vert, ShaderType::Vertex); data->vert_id = glCreateShader(GL_VERTEX_SHADER); gl_code = shader_code.C(); @@ -290,24 +252,10 @@ Shader::Shader(String const &name, msg::debug("compile log for vertex shader %s: %s\n", name.C(), errbuf); msg::debug("shader source:\n%s\n", shader_code.C()); } -#endif /* Compile fragment shader */ data->frag_crc = ShaderData::Hash(frag); -#if defined USE_D3D9 - hr = D3DXCompileShader(frag, (UINT)strlen(frag), macros, nullptr, "main", - "ps_3_0", 0, &shader_code, &error_msg, - &data->frag_table); - if (FAILED(hr)) - { - msg::error("failed to compile fragment shader %s: %s\n", name.C(), - error_msg ? error_msg->GetBufferPointer() : "error"); - msg::error("shader source:\n%s\n", frag); - } - data->m_dev->CreatePixelShader((DWORD *)shader_code->GetBufferPointer(), - &data->frag_shader); - shader_code->Release(); -#else + shader_code = ShaderData::Patch(frag, ShaderType::Fragment); data->frag_id = glCreateShader(GL_FRAGMENT_SHADER); gl_code = shader_code.C(); @@ -328,28 +276,7 @@ Shader::Shader(String const &name, name.C(), errbuf); msg::debug("shader source:\n%s\n", shader_code.C()); } -#endif -#if defined USE_D3D9 - /* FIXME: this is only debug code, we don't need it. */ - D3DXCONSTANTTABLE_DESC desc; - data->frag_table->GetDesc(&desc); - for (int i = 0; i < desc.Constants; i++) - { - D3DXCONSTANT_DESC cdesc; - UINT count = 1; - D3DXHANDLE h = data->frag_table->GetConstant(nullptr, i); - data->frag_table->GetConstantDesc(h, &cdesc, &count); - } - data->vert_table->GetDesc(&desc); - for (int i = 0; i < desc.Constants; i++) - { - D3DXCONSTANT_DESC cdesc; - UINT count = 1; - D3DXHANDLE h = data->vert_table->GetConstant(nullptr, i); - data->frag_table->GetConstantDesc(h, &cdesc, &count); - } -#else /* Create program */ data->prog_id = glCreateProgram(); glAttachShader(data->prog_id, data->vert_id); @@ -431,7 +358,6 @@ Shader::Shader(String const &name, } delete[] name_buffer; -#endif } int Shader::GetAttribCount() const @@ -444,8 +370,7 @@ ShaderAttrib Shader::GetAttribLocation(VertexUsage usage, int index) const ShaderAttrib ret; ret.m_flags = (uint64_t)(uint16_t)usage.ToScalar() << 16; ret.m_flags |= (uint64_t)(uint16_t)index; -#if defined USE_D3D9 -#else + GLint l = -1; if (!data->attrib_locations.try_get(ret.m_flags, l)) @@ -459,7 +384,6 @@ ShaderAttrib Shader::GetAttribLocation(VertexUsage usage, int index) const } } ret.m_flags |= (uint64_t)(uint32_t)l << 32; -#endif return ret; } @@ -470,36 +394,8 @@ ShaderUniform Shader::GetUniformLocation(String const& uni) const ShaderUniform Shader::GetUniformLocation(char const *uni) const { ShaderUniform ret; -#if defined USE_D3D9 - /* Global variables are prefixed with "$" */ - String tmpname = String("$") + uni; - D3DXCONSTANT_DESC cdesc; - D3DXHANDLE hr; - UINT count; - - count = 0; - hr = data->frag_table->GetConstantByName(nullptr, tmpname.C()); - if (hr) - data->frag_table->GetConstantDesc(hr, &cdesc, &count); - if (count) - { - ret.frag = cdesc.RegisterIndex; - ret.flags |= 1; - } - - count = 0; - hr = data->vert_table->GetConstantByName(nullptr, tmpname.C()); - if (hr) - data->vert_table->GetConstantDesc(hr, &cdesc, &count); - if (count) - { - ret.vert = cdesc.RegisterIndex; - ret.flags |= 2; - } -#else ret.frag = (uintptr_t)glGetUniformLocation(data->prog_id, uni); ret.vert = 0; -#endif return ret; } @@ -509,135 +405,65 @@ ShaderUniform Shader::GetUniformLocation(char const *uni) const void Shader::SetUniform(ShaderUniform const &uni, int i) { -#if defined USE_D3D9 - SetUniform(uni, ivec4(i, 0, 0, 0)); -#else glUniform1i((GLint)uni.frag, i); -#endif } void Shader::SetUniform(ShaderUniform const &uni, ivec2 const &v) { -#if defined USE_D3D9 - SetUniform(uni, ivec4(v, 0, 0)); -#else glUniform2i((GLint)uni.frag, v.x, v.y); -#endif } void Shader::SetUniform(ShaderUniform const &uni, ivec3 const &v) { -#if defined USE_D3D9 - SetUniform(uni, ivec4(v, 0)); -#else glUniform3i((GLint)uni.frag, v.x, v.y, v.z); -#endif } void Shader::SetUniform(ShaderUniform const &uni, ivec4 const &v) { -#if defined USE_D3D9 - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantI((UINT)uni.frag, &v[0], 1); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantI((UINT)uni.vert, &v[0], 1); -#else glUniform4i((GLint)uni.frag, v.x, v.y, v.z, v.w); -#endif } void Shader::SetUniform(ShaderUniform const &uni, float f) { -#if defined USE_D3D9 - SetUniform(uni, vec4(f, 0, 0, 0)); -#else glUniform1f((GLint)uni.frag, f); -#endif } void Shader::SetUniform(ShaderUniform const &uni, vec2 const &v) { -#if defined USE_D3D9 - SetUniform(uni, vec4(v, 0, 0)); -#else glUniform2fv((GLint)uni.frag, 1, &v[0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, vec3 const &v) { -#if defined USE_D3D9 - SetUniform(uni, vec4(v, 0)); -#else glUniform3fv((GLint)uni.frag, 1, &v[0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, vec4 const &v) { -#if defined USE_D3D9 - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, &v[0], 1); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, &v[0], 1); -#else glUniform4fv((GLint)uni.frag, 1, &v[0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, mat2 const &m) { -#if defined USE_D3D9 - /* FIXME: do we need padding here like for the mat3 version? */ - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 1); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 1); -#else glUniformMatrix2fv((GLint)uni.frag, 1, GL_FALSE, &m[0][0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, mat3 const &m) { -#if defined USE_D3D9 - /* Padding matrix columns is necessary on DirectX. We need to create - * a new data structure; a 4×4 matrix will do. */ - mat4 tmp(m, 1.0f); - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, &tmp[0][0], 3); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, &tmp[0][0], 3); -#else glUniformMatrix3fv((GLint)uni.frag, 1, GL_FALSE, &m[0][0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, mat4 const &m) { -#if defined USE_D3D9 - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, &m[0][0], 4); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, &m[0][0], 4); -#else glUniformMatrix4fv((GLint)uni.frag, 1, GL_FALSE, &m[0][0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, TextureUniform tex, int index) { -#if defined USE_D3D9 - data->m_dev->SetTexture(index, (LPDIRECT3DTEXTURE9)tex.m_flags); - data->m_dev->SetSamplerState(index, D3DSAMP_MAGFILTER, tex.m_attrib & 0xff); - data->m_dev->SetSamplerState(index, D3DSAMP_MINFILTER, (tex.m_attrib >> 8) & 0xff); - data->m_dev->SetSamplerState(index, D3DSAMP_MIPFILTER, (tex.m_attrib >> 16) & 0xff); -#else glActiveTexture(GL_TEXTURE0 + index); //glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, (int)tex.m_flags); SetUniform(uni, index); -#endif } /* @@ -646,103 +472,43 @@ void Shader::SetUniform(ShaderUniform const &uni, TextureUniform tex, int index) void Shader::SetUniform(ShaderUniform const &uni, array const &v) { -#if defined USE_D3D9 - /* FIXME: this will not work properly because we don't know how tell DX9 - * it's a bunch of floats instead of vec4. */ - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, - &v[0], v.count() / 4); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, - &v[0], v.count() / 4); -#else glUniform1fv((GLint)uni.frag, (GLsizei)v.count(), &v[0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, array const &v) { -#if defined USE_D3D9 - /* FIXME: this will not work properly because we don't know how tell DX9 - * it's a bunch of vec2 instead of vec4. */ - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, - &v[0][0], v.count() / 2); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, - &v[0][0], v.count() / 2); -#else glUniform2fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, array const &v) { -#if defined USE_D3D9 - /* FIXME: this will not work properly because we don't know how tell DX9 - * it's a bunch of vec3 instead of vec4. */ - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, - &v[0][0], v.count()); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, - &v[0][0], v.count()); -#else glUniform3fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); -#endif } void Shader::SetUniform(ShaderUniform const &uni, array const &v) { -#if defined USE_D3D9 - if (uni.flags & 1) - data->m_dev->SetPixelShaderConstantF((UINT)uni.frag, - &v[0][0], v.count()); - if (uni.flags & 2) - data->m_dev->SetVertexShaderConstantF((UINT)uni.vert, - &v[0][0], v.count()); -#else glUniform4fv((GLint)uni.frag, (GLsizei)v.count(), &v[0][0]); -#endif } void Shader::Bind() const { -#if defined USE_D3D9 - HRESULT hr; - hr = data->m_dev->SetVertexShader(data->vert_shader); - hr = data->m_dev->SetPixelShader(data->frag_shader); -#else glUseProgram(data->prog_id); -#endif } void Shader::Unbind() const { -#if defined USE_D3D9 - HRESULT hr; - hr = data->m_dev->SetVertexShader(nullptr); - hr = data->m_dev->SetPixelShader(nullptr); -#else /* FIXME: untested */ glUseProgram(0); -#endif } Shader::~Shader() { -#if defined USE_D3D9 - data->vert_shader->Release(); - data->vert_table->Release(); - data->frag_shader->Release(); - data->frag_table->Release(); -#else glDetachShader(data->prog_id, data->vert_id); glDetachShader(data->prog_id, data->frag_id); glDeleteShader(data->vert_id); glDeleteShader(data->frag_id); glDeleteProgram(data->prog_id); -#endif + delete data; } @@ -751,7 +517,6 @@ int ShaderData::GetVersion() { static int version = 0; -#if !defined USE_D3D9 if (!version) { #if defined HAVE_GLES_2X @@ -793,7 +558,6 @@ int ShaderData::GetVersion() glDeleteShader(id); #endif } -#endif return version; } diff --git a/src/gpu/texture.cpp b/src/gpu/texture.cpp index 8291374d..11f62e6c 100644 --- a/src/gpu/texture.cpp +++ b/src/gpu/texture.cpp @@ -12,12 +12,6 @@ #include "lolgl.h" -#if defined _WIN32 && defined USE_D3D9 -# define FAR -# define NEAR -# include -#endif - namespace lol { @@ -33,17 +27,9 @@ class TextureData ivec2 m_size; PixelFormat m_format; -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DTexture9 *m_texture; - D3DTEXTUREFILTERTYPE m_mag_filter; - D3DTEXTUREFILTERTYPE m_min_filter; - D3DTEXTUREFILTERTYPE m_mip_filter; -#else GLuint m_texture; GLint m_internal_format; GLenum m_gl_format, m_gl_type; -#endif int m_bytes_per_elem; }; @@ -62,52 +48,6 @@ Texture::Texture(ivec2 size, PixelFormat format) m_data->m_size = size; m_data->m_format = format; -#if defined USE_D3D9 - m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - - static struct - { - D3DFORMAT format; - int bytes; - } - const d3d_formats[] = - { - /* Unknown */ - { D3DFMT_UNKNOWN, 0 }, - - /* FIXME: this is all mixed up for the RGBA/ARGB combinations */ -# if defined USE_D3D9 - { D3DFMT_L8, 1 }, /* Y_8 */ - { D3DFMT_R8G8B8, 3 }, /* RGB_8 */ - { D3DFMT_A8R8G8B8, 4 }, /* RGBA_8 */ - { D3DFMT_UNKNOWN, 0 }, /* Y_F32 */ - { D3DFMT_UNKNOWN, 0 }, /* RGB_F32 */ - { D3DFMT_UNKNOWN, 0 }, /* RGBA_F32 */ -# else - { D3DFMT_LIN_L8, 1 }, - { D3DFMT_UNKNOWN, 0 }, - /* By default the X360 will swizzle the texture. Ask for linear. */ - { D3DFMT_LIN_A8R8G8B8, 4 }, - { D3DFMT_UNKNOWN, 0 }, /* Y_F32 */ - { D3DFMT_UNKNOWN, 0 }, /* RGB_F32 */ - { D3DFMT_UNKNOWN, 0 }, /* RGBA_F32 */ -# endif - }; - - D3DFORMAT d3d_format = GET_CLAMPED(d3d_formats, format).format; - ASSERT(d3d_format != D3DFMT_UNKNOWN, - "unsupported texture format %d\n", format); -# if defined USE_D3D9 - int d3d_usage = D3DUSAGE_DYNAMIC; -# else - int d3d_usage = D3DUSAGE_WRITEONLY; -# endif - - m_data->m_dev->CreateTexture(m_data->m_size.x, m_data->m_size.y, 1, - d3d_usage, d3d_format, - D3DPOOL_DEFAULT, &m_data->m_texture, nullptr); - m_data->m_bytes_per_elem = GET_CLAMPED(d3d_formats, format).bytes; -#else static struct { GLint internal_format; @@ -146,93 +86,38 @@ Texture::Texture(ivec2 size, PixelFormat format) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); -#endif } TextureUniform Texture::GetTextureUniform() const { TextureUniform ret; -#if defined USE_D3D9 - ret.m_flags = (uint64_t)(uintptr_t)m_data->m_texture; - ret.m_attrib = m_data->m_mag_filter; - ret.m_attrib |= m_data->m_min_filter << 8; - ret.m_attrib |= m_data->m_mip_filter << 16; -#else ret.m_flags = m_data->m_texture; -#endif return ret; } void Texture::Bind() { -#if defined USE_D3D9 - m_data->m_dev->SetTexture(0, m_data->m_texture); -#else -# if !defined HAVE_GLES_2X +#if !defined HAVE_GLES_2X glEnable(GL_TEXTURE_2D); -# endif - glBindTexture(GL_TEXTURE_2D, m_data->m_texture); #endif + glBindTexture(GL_TEXTURE_2D, m_data->m_texture); } void Texture::SetData(void *data) { -#if defined USE_D3D9 - D3DLOCKED_RECT rect; -# if defined USE_D3D9 - m_data->m_texture->LockRect(0, &rect, nullptr, D3DLOCK_DISCARD); -# else - m_data->m_texture->LockRect(0, &rect, nullptr, 0); -# endif - - memcpy(rect.pBits, data, rect.Pitch * m_data->m_size.y); - - m_data->m_texture->UnlockRect(0); - -#else glTexImage2D(GL_TEXTURE_2D, 0, m_data->m_internal_format, m_data->m_size.x, m_data->m_size.y, 0, m_data->m_gl_format, m_data->m_gl_type, data); -#endif } void Texture::SetSubData(ivec2 origin, ivec2 size, void *data) { -#if defined USE_D3D9 - D3DLOCKED_RECT rect; - m_data->m_texture->LockRect(0, &rect, nullptr, 0); - - int stride = size.x * m_data->m_bytes_per_elem; - for (int j = 0; j < size.y; j++) - { - uint8_t *dst = (uint8_t *)rect.pBits + (origin.y + j) * rect.Pitch; - uint8_t *src = (uint8_t *)data + j * stride; - memcpy(dst, src, stride); - } - - m_data->m_texture->UnlockRect(0); - -#else glTexSubImage2D(GL_TEXTURE_2D, 0, origin.x, origin.y, size.x, size.y, m_data->m_gl_format, m_data->m_gl_type, data); -#endif } void Texture::SetMagFiltering(TextureMagFilter filter) { -#if defined USE_D3D9 - // In DirectX, texture filtering is a per-texture-unit state - switch (filter) - { - case TextureMagFilter::LINEAR_TEXEL: - m_data->m_mag_filter = D3DTEXF_LINEAR; - break; - case TextureMagFilter::NEAREST_TEXEL: - default: - m_data->m_mag_filter = D3DTEXF_POINT; - break; - } -#else glBindTexture(GL_TEXTURE_2D, m_data->m_texture); GLenum gl_filter; switch (filter) @@ -246,40 +131,10 @@ void Texture::SetMagFiltering(TextureMagFilter filter) break; } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter); -#endif } void Texture::SetMinFiltering(TextureMinFilter filter) { -#if defined USE_D3D9 - // In DirectX, texture filtering is a per-texture-unit state -#define F(x, y) \ - m_data->m_min_filter = x; m_data->m_mip_filter = y; - switch (filter) - { - case TextureMinFilter::LINEAR_TEXEL_NO_MIPMAP: - F(D3DTEXF_POINT, D3DTEXF_NONE); - break; - case TextureMinFilter::NEAREST_TEXEL_NEAREST_MIPMAP: - F(D3DTEXF_POINT, D3DTEXF_POINT); - break; - case TextureMinFilter::LINEAR_TEXEL_NEAREST_MIPMAP: - F(D3DTEXF_LINEAR, D3DTEXF_POINT); - break; - case TextureMinFilter::NEAREST_TEXEL_LINEAR_MIPMAP: - F(D3DTEXF_POINT, D3DTEXF_LINEAR); - break; - case TextureMinFilter::LINEAR_TEXEL_LINEAR_MIPMAP: - F(D3DTEXF_LINEAR, D3DTEXF_LINEAR); - break; - case TextureMinFilter::NEAREST_TEXEL_NO_MIPMAP: - default: - F(D3DTEXF_POINT, D3DTEXF_NONE); - break; - } -#undef F - -#else glBindTexture(GL_TEXTURE_2D, m_data->m_texture); GLenum gl_filter; switch (filter) @@ -305,27 +160,17 @@ void Texture::SetMinFiltering(TextureMinFilter filter) break; } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter); -#endif } void Texture::GenerateMipmaps() { -#if defined USE_D3D9 - m_data->m_texture->->GenerateMipSubLevels(); -#else glBindTexture(GL_TEXTURE_2D, m_data->m_texture); glGenerateMipmap(GL_TEXTURE_2D); -#endif } Texture::~Texture() { -#if defined USE_D3D9 - m_data->m_texture->Release(); -#else glDeleteTextures(1, &m_data->m_texture); -#endif - delete m_data; } diff --git a/src/gpu/vertexbuffer.cpp b/src/gpu/vertexbuffer.cpp index 45cb45ed..04b5432c 100644 --- a/src/gpu/vertexbuffer.cpp +++ b/src/gpu/vertexbuffer.cpp @@ -14,12 +14,6 @@ #include "lolgl.h" -#if defined _WIN32 && defined USE_D3D9 -# define FAR -# define NEAR -# include -#endif - namespace lol { @@ -35,30 +29,8 @@ class VertexBufferData size_t m_size; -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DVertexBuffer9 *m_vbo; -#else GLuint m_vbo; uint8_t *m_memory; -#endif -}; - -// -// The VertexDeclarationData class -// ------------------------------- -// - -class VertexDeclarationData -{ - friend class VertexBuffer; - friend class VertexDeclaration; - -#if defined USE_D3D9 - IDirect3DDevice9 *m_dev; - IDirect3DVertexDeclaration9 *m_vdecl; -#else -#endif }; // @@ -80,8 +52,7 @@ VertexDeclaration::VertexDeclaration(VertexStreamBase const &s1, VertexStreamBase const &s10, VertexStreamBase const &s11, VertexStreamBase const &s12) - : m_count(0), - m_data(new VertexDeclarationData()) + : m_count(0) { if (&s1 != &VertexStreamBase::Empty) AddStream(s1); if (&s2 != &VertexStreamBase::Empty) AddStream(s2); @@ -95,29 +66,15 @@ VertexDeclaration::VertexDeclaration(VertexStreamBase const &s1, if (&s10 != &VertexStreamBase::Empty) AddStream(s10); if (&s11 != &VertexStreamBase::Empty) AddStream(s11); if (&s12 != &VertexStreamBase::Empty) AddStream(s12); - Initialize(); } VertexDeclaration::~VertexDeclaration() { -#if defined USE_D3D9 - if (FAILED(m_data->m_vdecl->Release())) - Abort(); -#else - -#endif - - delete m_data; } void VertexDeclaration::Bind() { -#if defined USE_D3D9 - if (FAILED(m_data->m_dev->SetVertexDeclaration(m_data->m_vdecl))) - Abort(); -#else /* FIXME: Nothing to do? */ -#endif } void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) @@ -125,36 +82,6 @@ void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) if (count <= 0) return; -#if defined USE_D3D9 - switch (type.ToScalar()) - { - case MeshPrimitive::Triangles: - if (FAILED(m_data->m_dev->DrawPrimitive(D3DPT_TRIANGLELIST, - skip, count))) - Abort(); - break; - case MeshPrimitive::TriangleStrips: - if (FAILED(m_data->m_dev->DrawPrimitive(D3DPT_TRIANGLESTRIP, - skip, count))) - Abort(); - break; - case MeshPrimitive::TriangleFans: - if (FAILED(m_data->m_dev->DrawPrimitive(D3DPT_TRIANGLEFAN, - skip, count))) - Abort(); - break; - case MeshPrimitive::Points: - if (FAILED(m_data->m_dev->DrawPrimitive(D3DPT_POINTLIST, - skip, count))) - Abort(); - break; - case MeshPrimitive::Lines: - if (FAILED(m_data->m_dev->DrawPrimitive(D3DPT_LINELIST, - skip, count))) - Abort(); - break; - } -#else /* FIXME: this has nothing to do here! */ switch (type.ToScalar()) { @@ -174,7 +101,6 @@ void VertexDeclaration::DrawElements(MeshPrimitive type, int skip, int count) glDrawArrays(GL_LINES, skip, count); break; } -#endif } void VertexDeclaration::DrawIndexedElements(MeshPrimitive type, int vbase, @@ -184,39 +110,6 @@ void VertexDeclaration::DrawIndexedElements(MeshPrimitive type, int vbase, if (count <= 0) return; -#if defined USE_D3D9 - switch (type.ToScalar()) - { - case MeshPrimitive::Triangles: - count = count / 3; - if (FAILED(m_data->m_dev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, - vbase, vskip, vcount, skip, count))) - Abort(); - break; - case MeshPrimitive::TriangleStrips: - count = count - 2; - if (FAILED(m_data->m_dev->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, - vbase, vskip, vcount, skip, count))) - Abort(); - break; - case MeshPrimitive::TriangleFans: - count = count - 2; - if (FAILED(m_data->m_dev->DrawIndexedPrimitive(D3DPT_TRIANGLEFAN, - vbase, vskip, vcount, skip, count))) - Abort(); - break; - case MeshPrimitive::Points: - if (FAILED(m_data->m_dev->DrawIndexedPrimitive(D3DPT_POINTLIST, - vbase, vskip, vcount, skip, count))) - Abort(); - break; - case MeshPrimitive::Lines: - if (FAILED(m_data->m_dev->DrawIndexedPrimitive(D3DPT_LINELIST, - vbase, vskip, vcount, skip, count))) - Abort(); - break; - } -#else /* FIXME: this has nothing to do here! */ switch (type.ToScalar()) { @@ -246,23 +139,10 @@ void VertexDeclaration::DrawIndexedElements(MeshPrimitive type, int vbase, glDrawElements(GL_LINES, count, GL_UNSIGNED_SHORT, 0); break; } -#endif } void VertexDeclaration::Unbind() { -#if defined USE_D3D9 - int stream = -1; - for (int i = 0; i < m_count; i++) - if (m_streams[i].index != stream) - { - stream = m_streams[i].index; - if (FAILED(m_data->m_dev->SetStreamSource(stream, 0, 0, 0))) - Abort(); - } - /* "NULL is an invalid input to SetVertexDeclaration" (DX9 guide), so - * we just don't touch the current vertex declaration. */ -#else for (int i = 0; i < m_count; i++) { if (m_streams[i].reg >= 0) @@ -275,7 +155,6 @@ void VertexDeclaration::Unbind() } } glBindBuffer(GL_ARRAY_BUFFER, 0); -#endif } void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1, @@ -291,15 +170,10 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1, ShaderAttrib attr11, ShaderAttrib attr12) { -#if defined USE_D3D9 - // Don't bother in DirectX world, shader attributes are not used - SetStream(vb, nullptr); -#else ShaderAttrib attribs[12] = { attr1, attr2, attr3, attr4, attr5, attr6, attr7, attr8, attr9, attr10, attr11, attr12 }; SetStream(vb, attribs); -#endif } void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[]) @@ -307,39 +181,6 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[]) if (!vb->m_data->m_size) return; -#if defined USE_D3D9 - /* Only the first item is required to know which stream this - * is about; the rest of the information is stored in the - * vertex declaration already. */ - VertexUsage usage = VertexUsage((attr1.m_flags >> 16) & 0xffff); - uint32_t index = attr1.m_flags & 0xffff; - - /* Find the stream number */ - uint32_t usage_index = 0; - int stream = -1; - for (int i = 0; i < m_count; i++) - if (m_streams[i].usage == usage) - if (usage_index++ == index) - { - stream = m_streams[i].index; - break; - } - - /* Compute this stream's stride */ - int stride = 0; - for (int i = 0; i < m_count; i++) - if (stream == m_streams[i].index) - stride += m_streams[i].size; - - /* Now we know the stream index and the element stride */ - /* FIXME: precompute most of the crap above! */ - if (stream >= 0) - { - if (FAILED(m_data->m_dev->SetStreamSource(stream, vb->m_data->m_vbo, - 0, stride))) - Abort(); - } -#else glBindBuffer(GL_ARRAY_BUFFER, vb->m_data->m_vbo); for (int n = 0; n < 12 && attribs[n].m_flags != (uint64_t)0 - 1; n++) { @@ -381,9 +222,9 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[]) } /* Finally, we need to retrieve the type of the data */ -# if !defined GL_DOUBLE -# define GL_DOUBLE 0 -# endif +#if !defined GL_DOUBLE +# define GL_DOUBLE 0 +#endif static struct { GLint size; GLenum type; } const tlut[] = { { 0, 0 }, @@ -419,10 +260,10 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[]) || tlut[type_index].type == GL_DOUBLE || tlut[type_index].type == GL_BYTE || tlut[type_index].type == GL_UNSIGNED_BYTE -# if defined USE_GLEW && !defined __APPLE__ +#if defined USE_GLEW && !defined __APPLE__ /* If this is not available, don't use it */ || !glVertexAttribIPointer -# endif +#endif || false) { /* Normalize unsigned bytes by default, because it's usually @@ -433,97 +274,16 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attribs[]) tlut[type_index].type, normalize, stride, (GLvoid const *)(uintptr_t)offset); } -# if defined GL_VERSION_3_0 +#if defined GL_VERSION_3_0 else { glVertexAttribIPointer((GLint)reg, tlut[type_index].size, tlut[type_index].type, stride, (GLvoid const *)(uintptr_t)offset); } -# endif - } - } #endif -} - -void VertexDeclaration::Initialize() -{ -#if defined USE_D3D9 - static D3DVERTEXELEMENT9 const end_element[] = { D3DDECL_END() }; - static D3DDECLTYPE const X = D3DDECLTYPE_UNUSED; - static D3DDECLTYPE const tlut[] = - { - D3DDECLTYPE_UNUSED, -#if LOL_FEATURE_CXX11_UNRESTRICTED_UNIONS - X, D3DDECLTYPE_FLOAT16_2, X, D3DDECLTYPE_FLOAT16_4, /* half */ -#endif - D3DDECLTYPE_FLOAT1, D3DDECLTYPE_FLOAT2, D3DDECLTYPE_FLOAT3, - D3DDECLTYPE_FLOAT4, /* float */ - X, X, X, X, /* double */ - X, X, X, X, /* int8_t */ - X, X, X, D3DDECLTYPE_UBYTE4N, /* uint8_t */ - X, D3DDECLTYPE_SHORT2N, X, D3DDECLTYPE_SHORT4N, /* int16_t */ - X, D3DDECLTYPE_USHORT2N, X, D3DDECLTYPE_USHORT4N, /* uint16_t */ - X, X, X, X, /* int32_t */ - X, X, X, X, /* uint32_t */ - }; - static D3DDECLUSAGE const ulut[] = - { - D3DDECLUSAGE_POSITION, - D3DDECLUSAGE_BLENDWEIGHT, - D3DDECLUSAGE_BLENDINDICES, - D3DDECLUSAGE_NORMAL, - D3DDECLUSAGE_PSIZE, - D3DDECLUSAGE_TEXCOORD, - D3DDECLUSAGE_TANGENT, - D3DDECLUSAGE_BINORMAL, - D3DDECLUSAGE_TESSFACTOR, - D3DDECLUSAGE_POSITIONT, - D3DDECLUSAGE_COLOR, - D3DDECLUSAGE_FOG, - D3DDECLUSAGE_DEPTH, - D3DDECLUSAGE_SAMPLE, - }; - - D3DVERTEXELEMENT9 elements[12 + 1]; - for (int n = 0; n < m_count; n++) - { - elements[n].Stream = m_streams[n].index; - elements[n].Offset = 0; - for (int i = 0; i < n; i++) - if (m_streams[i].index == m_streams[n].index) - elements[n].Offset += m_streams[i].size; - - if (m_streams[n].stream_type >= 0 - && m_streams[n].stream_type < sizeof(tlut) / sizeof(*tlut)) - elements[n].Type = tlut[m_streams[n].stream_type]; - else - elements[n].Type = D3DDECLTYPE_UNUSED; - - elements[n].Method = D3DDECLMETHOD_DEFAULT; - - if (m_streams[n].usage >= 0 - && m_streams[n].usage < sizeof(ulut) / sizeof(*ulut)) - elements[n].Usage = ulut[m_streams[n].usage]; - else - elements[n].Usage = D3DDECLUSAGE_POSITION; - - elements[n].UsageIndex = 0; - for (int i = 0; i < n; i++) - if (elements[i].Stream == elements[n].Stream - && elements[i].Usage == elements[n].Usage) - elements[n].UsageIndex++; + } } - elements[m_count] = end_element[0]; - - m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - - if (FAILED(m_data->m_dev->CreateVertexDeclaration(elements, - &m_data->m_vdecl))) - Abort(); -#else - -#endif } void VertexDeclaration::AddStream(VertexStreamBase const &s) @@ -596,28 +356,17 @@ VertexBuffer::VertexBuffer(size_t size) m_data->m_size = size; if (!size) return; -#if defined USE_D3D9 - m_data->m_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - if (FAILED(m_data->m_dev->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, nullptr, - D3DPOOL_MANAGED, &m_data->m_vbo, nullptr))) - Abort(); -#else + glGenBuffers(1, &m_data->m_vbo); m_data->m_memory = new uint8_t[size]; -#endif } VertexBuffer::~VertexBuffer() { if (m_data->m_size) { -#if defined USE_D3D9 - if (FAILED(m_data->m_vbo->Release())) - Abort(); -#else glDeleteBuffers(1, &m_data->m_vbo); delete[] m_data->m_memory; -#endif } delete m_data; } @@ -631,31 +380,21 @@ void *VertexBuffer::Lock(size_t offset, size_t size) { if (!m_data->m_size) return nullptr; -#if defined USE_D3D9 - void *ret; - if (FAILED(m_data->m_vbo->Lock(offset, size, (void **)&ret, 0))) - Abort(); - return ret; -#else + /* FIXME: is there a way to use "size"? */ UNUSED(size); return m_data->m_memory + offset; -#endif } void VertexBuffer::Unlock() { if (!m_data->m_size) return; -#if defined USE_D3D9 - if (FAILED(m_data->m_vbo->Unlock())) - Abort(); -#else + glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo); glBufferData(GL_ARRAY_BUFFER, m_data->m_size, m_data->m_memory, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); -#endif } } /* namespace lol */ diff --git a/src/lol/gpu/renderer.h b/src/lol/gpu/renderer.h index a9ad3089..a6e9f3cd 100644 --- a/src/lol/gpu/renderer.h +++ b/src/lol/gpu/renderer.h @@ -135,8 +135,6 @@ private: public: void Clear(ClearMask mask); - void *GetDevice(); - static void AddNew(ivec2 size); static int GetCount(); static Renderer* Get(int index = 0); diff --git a/src/lol/gpu/shader.h b/src/lol/gpu/shader.h index 5ddd00d5..0274d22c 100644 --- a/src/lol/gpu/shader.h +++ b/src/lol/gpu/shader.h @@ -304,9 +304,6 @@ public: private: uint64_t m_flags; -#if defined USE_D3D9 - uint32_t m_attrib; -#endif }; class ShaderData; diff --git a/src/lol/gpu/vertexbuffer.h b/src/lol/gpu/vertexbuffer.h index 13dd1419..d697d09a 100644 --- a/src/lol/gpu/vertexbuffer.h +++ b/src/lol/gpu/vertexbuffer.h @@ -236,7 +236,6 @@ public: VertexStreamBase GetStream(int index) const; private: - void Initialize(); void AddStream(VertexStreamBase const &); struct @@ -247,9 +246,6 @@ private: } m_streams[12 + 1]; int m_count; - -private: - class VertexDeclarationData *m_data; }; } /* namespace lol */ diff --git a/src/platform/sdl/sdlapp.cpp b/src/platform/sdl/sdlapp.cpp index b082f0d6..7d10e5a0 100644 --- a/src/platform/sdl/sdlapp.cpp +++ b/src/platform/sdl/sdlapp.cpp @@ -20,10 +20,6 @@ # else # include # endif -# if USE_D3D9 -# include -# include -# endif #endif #include "lolgl.h" @@ -33,10 +29,6 @@ # include "platform/d3d9/d3d9input.h" #endif -#if (USE_SDL || USE_OLD_SDL) && USE_D3D9 -HWND g_hwnd = nullptr; -#endif - namespace lol { @@ -100,13 +92,6 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) SDL_WM_SetCaption(title, nullptr); -# if 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_DEPTH_SIZE, 16); @@ -114,7 +99,6 @@ SdlAppDisplay::SdlAppDisplay(char const *title, ivec2 res) // and screen_h with the value of vidinfo after the call to // SDL_SetVideoMode. data->m_window = SDL_SetVideoMode(res.x, res.y, 0, SDL_OPENGL); -# endif if (!data->m_window) { @@ -151,8 +135,6 @@ void SdlAppDisplay::SetResolution(ivec2 resolution) { #if USE_SDL SDL_SetWindowSize(data->m_window, resolution.x, resolution.y); -#elif USE_OLD_SDL && USE_D3D9 - //Not implemented #elif USE_OLD_SDL //Not implemented #endif @@ -161,8 +143,6 @@ void SdlAppDisplay::SetPosition(ivec2 position) { #if USE_SDL SDL_SetWindowPosition(data->m_window, position.x, position.y); -#elif USE_OLD_SDL && USE_D3D9 - //Not implemented #elif USE_OLD_SDL //Not implemented #endif @@ -174,29 +154,15 @@ void SdlAppDisplay::Enable() //TODO: Should we do that: ? SDL_GL_MakeCurrent(data->m_window, data->m_glcontext); #endif -#if (USE_SDL || USE_OLD_SDL) && defined USE_D3D9 - IDirect3DDevice9 *d3d_dev = (IDirect3DDevice9 *)Renderer::Get()->GetDevice(); - HRESULT hr; - hr = d3d_dev->BeginScene(); - if (FAILED(hr)) - Abort(); -#endif } void SdlAppDisplay::Disable() { - #if USE_SDL +#if USE_SDL SDL_GL_SwapWindow(data->m_window); - #elif USE_OLD_SDL && USE_D3D9 - hr = d3d_dev->EndScene(); - if (FAILED(hr)) - Abort(); - hr = d3d_dev->Present(nullptr, nullptr, nullptr, nullptr); - if (FAILED(hr)) - Abort(); - #elif USE_OLD_SDL +#elif USE_OLD_SDL SDL_GL_SwapBuffers(); - #endif +#endif } #if USE_SDL @@ -209,8 +175,6 @@ const char* SceneDisplay::GetPhysicalName(int index) { return SDL_GetDisplayName(index); } -#elif USE_OLD_SDL && USE_D3D9 -// Not implemented #elif USE_OLD_SDL // Not implemented #endif diff --git a/src/scene.cpp b/src/scene.cpp index bee56f48..10cad82c 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -130,11 +130,16 @@ private: /** Back buffer: where to render to. */ Framebuffer *m_backbuffer = nullptr; - Shader *m_pp_shader = nullptr; - VertexDeclaration *m_pp_vdecl; - ShaderUniform m_pp_texture; - ShaderAttrib m_pp_coord; - VertexBuffer *m_pp_vbo; + + struct postprocess + { + Shader *m_shader = nullptr; + VertexBuffer *m_vbo = nullptr; + VertexDeclaration *m_vdecl = nullptr; + ShaderUniform m_texture; + ShaderAttrib m_coord; + } + m_pp; /* Sources are shared by all scenes. * Renderers are scene-dependent. They get the primitive in the identical @@ -189,18 +194,18 @@ Scene::Scene(ivec2 size) : data(new SceneData()) { data->m_backbuffer = new Framebuffer(size); - data->m_pp_shader = Shader::Create(LOLFX_RESOURCE_NAME(postprocess)); - data->m_pp_coord = data->m_pp_shader->GetAttribLocation(VertexUsage::Position, 0); - data->m_pp_vdecl = new VertexDeclaration(VertexStream(VertexUsage::Position)); - data->m_pp_texture = data->m_pp_shader->GetUniformLocation("u_texture"); + data->m_pp.m_shader = Shader::Create(LOLFX_RESOURCE_NAME(postprocess)); + data->m_pp.m_coord = data->m_pp.m_shader->GetAttribLocation(VertexUsage::Position, 0); + data->m_pp.m_vdecl = new VertexDeclaration(VertexStream(VertexUsage::Position)); + data->m_pp.m_texture = data->m_pp.m_shader->GetUniformLocation("u_texture"); array quad { vec2( 1.0, 1.0), vec2(-1.0, -1.0), vec2( 1.0, -1.0), vec2(-1.0, -1.0), vec2( 1.0, 1.0), vec2(-1.0, 1.0), }; - data->m_pp_vbo = new VertexBuffer(quad.bytes()); - void *vertices = data->m_pp_vbo->Lock(0, 0); - memcpy(vertices, &quad[0], quad.bytes()); - data->m_pp_vbo->Unlock(); + data->m_pp.m_vbo = new VertexBuffer(quad.bytes()); + void *vertices = data->m_pp.m_vbo->Lock(0, 0); + memcpy(vertices, quad.data(), quad.bytes()); + data->m_pp.m_vbo->Unlock(); /* Create a default orthographic camera, in case the user doesn’t. */ data->m_default_cam = new Camera(); @@ -212,7 +217,7 @@ Scene::Scene(ivec2 size) data->m_tile_api.m_shader = 0; data->m_tile_api.m_palette_shader = 0; data->m_tile_api.m_vdecl = new VertexDeclaration(VertexStream(VertexUsage::Position), - VertexStream(VertexUsage::TexCoord)); + VertexStream(VertexUsage::TexCoord)); data->m_line_api.m_shader = 0; data->m_line_api.m_vdecl = new VertexDeclaration(VertexStream(VertexUsage::Position, VertexUsage::Color)); @@ -618,13 +623,13 @@ void Scene::render(float seconds) data->m_backbuffer->Unbind(); /* Now blit the offline buffer */ - data->m_pp_shader->Bind(); - data->m_pp_shader->SetUniform(data->m_pp_texture, data->m_backbuffer->GetTextureUniform(), 0); - data->m_pp_vdecl->SetStream(data->m_pp_vbo, data->m_pp_coord); - data->m_pp_vdecl->Bind(); - data->m_pp_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); - data->m_pp_vdecl->Unbind(); - data->m_pp_shader->Unbind(); + data->m_pp.m_shader->Bind(); + data->m_pp.m_shader->SetUniform(data->m_pp.m_texture, data->m_backbuffer->GetTextureUniform(), 0); + data->m_pp.m_vdecl->SetStream(data->m_pp.m_vbo, data->m_pp.m_coord); + data->m_pp.m_vdecl->Bind(); + data->m_pp.m_vdecl->DrawElements(MeshPrimitive::Triangles, 0, 6); + data->m_pp.m_vdecl->Unbind(); + data->m_pp.m_shader->Unbind(); } //----------------------------------------------------------------------------- @@ -669,9 +674,7 @@ void Scene::render_tiles() // XXX: rename to Blit() rc.SetBlendEquation(BlendEquation::Add, BlendEquation::Max); rc.SetAlphaFunc(AlphaFunc::GreaterOrEqual, 0.01f); -#if defined USE_D3D9 - /* TODO */ -#elif (defined USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X +#if (defined USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X glEnable(GL_TEXTURE_2D); #endif @@ -766,9 +769,7 @@ void Scene::render_tiles() // XXX: rename to Blit() } -#if defined USE_D3D9 - /* TODO */ -#elif (defined USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X +#if (defined USE_GLEW || defined HAVE_GL_2X) && !defined HAVE_GLES_2X glDisable(GL_TEXTURE_2D); #endif } diff --git a/src/textureimage.cpp b/src/textureimage.cpp index 19a5f627..eb4f21e8 100644 --- a/src/textureimage.cpp +++ b/src/textureimage.cpp @@ -18,11 +18,6 @@ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN -# if defined USE_D3D9 -# define FAR -# define NEAR -# include -# endif #endif #include "textureimage-private.h" diff --git a/src/tileset.cpp b/src/tileset.cpp index 9d39428f..473e6441 100644 --- a/src/tileset.cpp +++ b/src/tileset.cpp @@ -20,11 +20,6 @@ # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN -# if defined USE_D3D9 -# define FAR -# define NEAR -# include -# endif #endif #include "textureimage-private.h" diff --git a/src/video.cpp b/src/video.cpp index e9a30579..3ed7319f 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -11,9 +11,6 @@ #include #if defined _WIN32 -# if defined USE_D3D9 -# include -# endif # define WIN32_LEAN_AND_MEAN # include # undef WIN32_LEAN_AND_MEAN @@ -61,8 +58,7 @@ void Video::SetDebugRenderMode(DebugRenderMode d) case DebugRenderMode::Normal: case DebugRenderMode::UV: { -#if defined USE_D3D9 -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X #elif defined USE_GLEW || defined HAVE_GL_2X glEnable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); @@ -71,8 +67,7 @@ void Video::SetDebugRenderMode(DebugRenderMode d) } case DebugRenderMode::Wireframe: { -#if defined USE_D3D9 -#elif defined HAVE_GLES_2X +#if defined HAVE_GLES_2X #elif defined USE_GLEW || defined HAVE_GL_2X glDisable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); @@ -101,9 +96,7 @@ void Video::Destroy() void Video::Capture(uint32_t *buffer) { -#if defined USE_D3D9 - /* TODO */ -#elif defined USE_GLEW || defined HAVE_GL_2X || defined HAVE_GLEX_2X +#if defined USE_GLEW || defined HAVE_GL_2X || defined HAVE_GLEX_2X GLint v[4]; glGetIntegerv(GL_VIEWPORT, v); int width = v[2], height = v[3];