From a76c8d8d09f6b609aaeb72d5f263665026777acf Mon Sep 17 00:00:00 2001 From: vng Date: Mon, 28 Nov 2011 17:29:54 +0300 Subject: [PATCH] [msvc] Fix yg compilation issues. --- yg/indexbuffer.cpp | 2 +- yg/internal/gl_procedures.inl | 34 +++++++++++----------- yg/internal/opengl.cpp | 54 ++++++++++++++++++++++++----------- yg/internal/opengl.hpp | 47 ++++++++++++++++++------------ yg/internal/opengl_ext.cpp | 22 -------------- yg/internal/opengl_win32.cpp | 25 ++++++++-------- yg/render_state_updater.cpp | 2 +- 7 files changed, 97 insertions(+), 89 deletions(-) diff --git a/yg/indexbuffer.cpp b/yg/indexbuffer.cpp index 4919258167..7f745e6006 100644 --- a/yg/indexbuffer.cpp +++ b/yg/indexbuffer.cpp @@ -89,7 +89,7 @@ namespace yg /// orphaning the old copy of the buffer data. /// this provides that the glMapBuffer will not wait. - OGLCHECK(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_size, 0, GL_DYNAMIC_DRAW)); + OGLCHECK(glBufferDataFn(GL_ELEMENT_ARRAY_BUFFER, m_size, 0, GL_DYNAMIC_DRAW)); m_gpuData = glMapBufferFn(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY_MWM); diff --git a/yg/internal/gl_procedures.inl b/yg/internal/gl_procedures.inl index a9d78d67de..8ab7bbd79a 100644 --- a/yg/internal/gl_procedures.inl +++ b/yg/internal/gl_procedures.inl @@ -2,26 +2,26 @@ // buffer objects extensions -DEFINE_GL_PROC(PFNGLBINDBUFFERPROC, "glBindBufferFn", glBindBufferFn) -DEFINE_GL_PROC(PFNGLGENBUFFERSPROC, "glGenBuffers", glGenBuffersFn) -DEFINE_GL_PROC(PFNGLBUFFERDATAPROC, "glBufferData", glBufferDataFn) -DEFINE_GL_PROC(PFNGLBUFFERSUBDATAPROC, "glBufferSubData", glBufferSubDataFn) -DEFINE_GL_PROC(PFNGLDELETEBUFFERSPROC, "glDeleteBuffers", glDeleteBuffersFn) -DEFINE_GL_PROC(PFNGLMAPBUFFERPROC, "glMapBuffer", glMapBufferFn) -DEFINE_GL_PROC(PFNGLUNMAPBUFFERPROC, "glUnmapBuffer", glUnmapBufferFn) +DEFINE_GL_PROC("glBindBufferFn", glBindBufferFn) +DEFINE_GL_PROC("glGenBuffers", glGenBuffersFn) +DEFINE_GL_PROC("glBufferData", glBufferDataFn) +DEFINE_GL_PROC("glBufferSubData", glBufferSubDataFn) +DEFINE_GL_PROC("glDeleteBuffers", glDeleteBuffersFn) +DEFINE_GL_PROC("glMapBuffer", glMapBufferFn) +DEFINE_GL_PROC("glUnmapBuffer", glUnmapBufferFn) // framebuffers extensions -DEFINE_GL_PROC(PFNGLBINDFRAMEBUFFERPROC, "glBindFramebuffer", glBindFramebufferFn) -DEFINE_GL_PROC(PFNGLFRAMEBUFFERTEXTURE2DPROC, "glFramebufferTexture2D", glFramebufferTexture2DFn) -DEFINE_GL_PROC(PFNGLFRAMEBUFFERRENDERBUFFERPROC, "glFramebufferRenderbuffer", glFramebufferRenderbufferFn) -DEFINE_GL_PROC(PFNGLGENFRAMEBUFFERSPROC, "glGenFramebuffers", glGenFramebuffersFn) -DEFINE_GL_PROC(PFNGLDELETEFRAMEBUFFERSPROC, "glDeleteFramebuffers", glDeleteFramebuffersFn) -DEFINE_GL_PROC(PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, "glCheckFramebufferStatus", glCheckFramebufferStatusFn) +DEFINE_GL_PROC("glBindFramebuffer", glBindFramebufferFn) +DEFINE_GL_PROC("glFramebufferTexture2D", glFramebufferTexture2DFn) +DEFINE_GL_PROC("glFramebufferRenderbuffer", glFramebufferRenderbufferFn) +DEFINE_GL_PROC("glGenFramebuffers", glGenFramebuffersFn) +DEFINE_GL_PROC("glDeleteFramebuffers", glDeleteFramebuffersFn) +DEFINE_GL_PROC("glCheckFramebufferStatus", glCheckFramebufferStatusFn) // renderbuffer extensions -DEFINE_GL_PROC(PFNGLGENRENDERBUFFERSPROC, "glGenRenderbuffers", glGenRenderbuffersFn) -DEFINE_GL_PROC(PFNGLDELETERENDERBUFFERSEXTPROC, "glDeleteRenderbuffers", glDeleteRenderbuffersFn) -DEFINE_GL_PROC(PFNGLBINDRENDERBUFFEREXTPROC, "glBindRenderbuffer", glBindRenderbufferFn) -DEFINE_GL_PROC(PFNGLRENDERBUFFERSTORAGEEXTPROC, "glRenderbufferStorage", glRenderbufferStorageFn) +DEFINE_GL_PROC("glGenRenderbuffers", glGenRenderbuffersFn) +DEFINE_GL_PROC("glDeleteRenderbuffers", glDeleteRenderbuffersFn) +DEFINE_GL_PROC("glBindRenderbuffer", glBindRenderbufferFn) +DEFINE_GL_PROC("glRenderbufferStorage", glRenderbufferStorageFn) diff --git a/yg/internal/opengl.cpp b/yg/internal/opengl.cpp index 12ce50f0fd..2d391f83f6 100644 --- a/yg/internal/opengl.cpp +++ b/yg/internal/opengl.cpp @@ -2,16 +2,36 @@ #include "../../base/logging.hpp" #include "../../base/string_utils.hpp" + #include "../../std/bind.hpp" #ifdef OMIM_OS_BADA #include #endif + namespace yg { namespace gl { + const int GL_FRAMEBUFFER_BINDING_MWM = GL_FRAMEBUFFER_BINDING_EXT; + const int GL_FRAMEBUFFER_MWM = GL_FRAMEBUFFER_EXT; + const int GL_FRAMEBUFFER_UNSUPPORTED_MWM = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + const int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_MWM = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT; + const int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_MWM = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT; + const int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_MWM = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT; + const int GL_FRAMEBUFFER_COMPLETE_MWM = GL_FRAMEBUFFER_COMPLETE_EXT; + + const int GL_DEPTH_ATTACHMENT_MWM = GL_DEPTH_ATTACHMENT_EXT; + const int GL_COLOR_ATTACHMENT0_MWM = GL_COLOR_ATTACHMENT0_EXT; + const int GL_RENDERBUFFER_MWM = GL_RENDERBUFFER_EXT; + const int GL_RENDERBUFFER_BINDING_MWM = GL_RENDERBUFFER_BINDING_EXT; + const int GL_DEPTH_COMPONENT16_MWM = GL_DEPTH_COMPONENT16; + const int GL_DEPTH_COMPONENT24_MWM = GL_DEPTH_COMPONENT24; + const int GL_RGBA8_MWM = GL_RGBA8; + + const int GL_WRITE_ONLY_MWM = GL_WRITE_ONLY; + platform_unsupported::platform_unsupported(char const * reason) : m_reason(reason) {} @@ -57,25 +77,25 @@ namespace yg bool g_isFramebufferSupported = true; bool g_isRenderbufferSupported = true; - void (* glBindBufferFn) (GLenum target, GLuint buffer); - void (* glGenBuffersFn) (GLsizei n, GLuint *buffers); - void (* glBufferDataFn) (GLenum target, long size, const GLvoid *data, GLenum usage); - void (* glBufferSubDataFn) (GLenum target, long offset, long size, const GLvoid *data); - void (* glDeleteBuffersFn) (GLsizei n, const GLuint *buffers); - void* (* glMapBufferFn) (GLenum target, GLenum access); - GLboolean (* glUnmapBufferFn) (GLenum target); + void (OPENGL_CALLING_CONVENTION * glBindBufferFn) (GLenum target, GLuint buffer); + void (OPENGL_CALLING_CONVENTION * glGenBuffersFn) (GLsizei n, GLuint *buffers); + void (OPENGL_CALLING_CONVENTION * glBufferDataFn) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); + void (OPENGL_CALLING_CONVENTION * glBufferSubDataFn) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); + void (OPENGL_CALLING_CONVENTION * glDeleteBuffersFn) (GLsizei n, const GLuint *buffers); + void * (OPENGL_CALLING_CONVENTION * glMapBufferFn) (GLenum target, GLenum access); + GLboolean (OPENGL_CALLING_CONVENTION * glUnmapBufferFn) (GLenum target); - void (* glBindFramebufferFn) (GLenum target, GLuint framebuffer); - void (* glFramebufferTexture2DFn) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - void (* glFramebufferRenderbufferFn) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - void (* glGenFramebuffersFn) (GLsizei n, GLuint *framebuffers); - void (* glDeleteFramebuffersFn) (GLsizei n, const GLuint *framebuffers); - GLenum (* glCheckFramebufferStatusFn) (GLenum target); + void (OPENGL_CALLING_CONVENTION * glBindFramebufferFn) (GLenum target, GLuint framebuffer); + void (OPENGL_CALLING_CONVENTION * glFramebufferTexture2DFn) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + void (OPENGL_CALLING_CONVENTION * glFramebufferRenderbufferFn) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + void (OPENGL_CALLING_CONVENTION * glGenFramebuffersFn) (GLsizei n, GLuint *framebuffers); + void (OPENGL_CALLING_CONVENTION * glDeleteFramebuffersFn) (GLsizei n, const GLuint *framebuffers); + GLenum (OPENGL_CALLING_CONVENTION * glCheckFramebufferStatusFn) (GLenum target); - void (* glGenRenderbuffersFn) (GLsizei n, GLuint *renderbuffers); - void (* glDeleteRenderbuffersFn) (GLsizei n, const GLuint *renderbuffers); - void (* glBindRenderbufferFn) (GLenum target, GLuint renderbuffer); - void (* glRenderbufferStorageFn) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + void (OPENGL_CALLING_CONVENTION * glGenRenderbuffersFn) (GLsizei n, GLuint *renderbuffers); + void (OPENGL_CALLING_CONVENTION * glDeleteRenderbuffersFn) (GLsizei n, const GLuint *renderbuffers); + void (OPENGL_CALLING_CONVENTION * glBindRenderbufferFn) (GLenum target, GLuint renderbuffer); + void (OPENGL_CALLING_CONVENTION * glRenderbufferStorageFn) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); bool g_doDeleteOnDestroy = true; diff --git a/yg/internal/opengl.hpp b/yg/internal/opengl.hpp index cf946c6fc0..48f8894dba 100644 --- a/yg/internal/opengl.hpp +++ b/yg/internal/opengl.hpp @@ -2,9 +2,10 @@ #include "../../std/target_os.hpp" #if defined(OMIM_OS_WINDOWS) - #include "../../std/windows.hpp" #include + #define GL_GLEXT_PROTOTYPES + #include "../../3party/GL/glext.h" #elif defined(OMIM_OS_BADA) #include @@ -20,6 +21,7 @@ #define OMIM_GL_ES #else #include + #include #endif #elif defined(OMIM_OS_ANDROID) @@ -32,9 +34,18 @@ #include #endif + +#ifdef OMIM_OS_WINDOWS + #define OPENGL_CALLING_CONVENTION __stdcall +#else + #define OPENGL_CALLING_CONVENTION +#endif + + #include "../../base/src_point.hpp" #include "../../std/exception.hpp" + namespace yg { namespace gl @@ -47,13 +58,13 @@ namespace yg extern const int GL_WRITE_ONLY_MWM; - extern void (* glBindBufferFn) (GLenum target, GLuint buffer); - extern void (* glGenBuffersFn) (GLsizei n, GLuint *buffers); - extern void (* glBufferDataFn) (GLenum target, long size, const GLvoid *data, GLenum usage); - extern void (* glBufferSubDataFn) (GLenum target, long offset, long size, const GLvoid *data); - extern void (* glDeleteBuffersFn) (GLsizei n, const GLuint *buffers); - extern void* (* glMapBufferFn) (GLenum target, GLenum access); - extern GLboolean (* glUnmapBufferFn) (GLenum target); + extern void (OPENGL_CALLING_CONVENTION * glBindBufferFn) (GLenum target, GLuint buffer); + extern void (OPENGL_CALLING_CONVENTION * glGenBuffersFn) (GLsizei n, GLuint *buffers); + extern void (OPENGL_CALLING_CONVENTION * glBufferDataFn) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); + extern void (OPENGL_CALLING_CONVENTION * glBufferSubDataFn) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); + extern void (OPENGL_CALLING_CONVENTION * glDeleteBuffersFn) (GLsizei n, const GLuint *buffers); + extern void * (OPENGL_CALLING_CONVENTION * glMapBufferFn) (GLenum target, GLenum access); + extern GLboolean (OPENGL_CALLING_CONVENTION * glUnmapBufferFn) (GLenum target); // framebuffers extensions @@ -72,20 +83,20 @@ namespace yg extern const int GL_DEPTH_COMPONENT24_MWM; extern const int GL_RGBA8_MWM; - extern void (* glBindFramebufferFn) (GLenum target, GLuint framebuffer); - extern void (* glFramebufferTexture2DFn) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); - extern void (* glFramebufferRenderbufferFn) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - extern void (* glGenFramebuffersFn) (GLsizei n, GLuint *framebuffers); - extern void (* glDeleteFramebuffersFn) (GLsizei n, const GLuint *framebuffers); - extern GLenum (* glCheckFramebufferStatusFn) (GLenum target); + extern void (OPENGL_CALLING_CONVENTION * glBindFramebufferFn) (GLenum target, GLuint framebuffer); + extern void (OPENGL_CALLING_CONVENTION * glFramebufferTexture2DFn) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + extern void (OPENGL_CALLING_CONVENTION * glFramebufferRenderbufferFn) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + extern void (OPENGL_CALLING_CONVENTION * glGenFramebuffersFn) (GLsizei n, GLuint *framebuffers); + extern void (OPENGL_CALLING_CONVENTION * glDeleteFramebuffersFn) (GLsizei n, const GLuint *framebuffers); + extern GLenum (OPENGL_CALLING_CONVENTION * glCheckFramebufferStatusFn) (GLenum target); // renderbuffer extensions - extern void (* glGenRenderbuffersFn) (GLsizei n, GLuint *renderbuffers); - extern void (* glDeleteRenderbuffersFn) (GLsizei n, const GLuint *renderbuffers); - extern void (* glBindRenderbufferFn) (GLenum target, GLuint renderbuffer); - extern void (* glRenderbufferStorageFn) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + extern void (OPENGL_CALLING_CONVENTION * glGenRenderbuffersFn) (GLsizei n, GLuint *renderbuffers); + extern void (OPENGL_CALLING_CONVENTION * glDeleteRenderbuffersFn) (GLsizei n, const GLuint *renderbuffers); + extern void (OPENGL_CALLING_CONVENTION * glBindRenderbufferFn) (GLenum target, GLuint renderbuffer); + extern void (OPENGL_CALLING_CONVENTION * glRenderbufferStorageFn) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); /// This flag controls, whether OpenGL resources should delete themselves upon destruction. /// Sounds odd, but in EGL there are cases when the only function one should call to finish diff --git a/yg/internal/opengl_ext.cpp b/yg/internal/opengl_ext.cpp index 38e907ca7c..04a6c41e3d 100644 --- a/yg/internal/opengl_ext.cpp +++ b/yg/internal/opengl_ext.cpp @@ -1,32 +1,10 @@ #include "opengl.hpp" -#ifdef OMIM_OS_MAC - #include - #include -#endif namespace yg { namespace gl { - const int GL_FRAMEBUFFER_BINDING_MWM = GL_FRAMEBUFFER_BINDING_EXT; - const int GL_FRAMEBUFFER_MWM = GL_FRAMEBUFFER_EXT; - const int GL_FRAMEBUFFER_UNSUPPORTED_MWM = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - const int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_MWM = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT; - const int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_MWM = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT; - const int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_MWM = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT; - const int GL_FRAMEBUFFER_COMPLETE_MWM = GL_FRAMEBUFFER_COMPLETE_EXT; - - const int GL_DEPTH_ATTACHMENT_MWM = GL_DEPTH_ATTACHMENT_EXT; - const int GL_COLOR_ATTACHMENT0_MWM = GL_COLOR_ATTACHMENT0_EXT; - const int GL_RENDERBUFFER_MWM = GL_RENDERBUFFER_EXT; - const int GL_RENDERBUFFER_BINDING_MWM = GL_RENDERBUFFER_BINDING_EXT; - const int GL_DEPTH_COMPONENT16_MWM = GL_DEPTH_COMPONENT16; - const int GL_DEPTH_COMPONENT24_MWM = GL_DEPTH_COMPONENT24; - const int GL_RGBA8_MWM = GL_RGBA8; - - const int GL_WRITE_ONLY_MWM = GL_WRITE_ONLY; - void InitExtensions() { DumpGLInformation(); diff --git a/yg/internal/opengl_win32.cpp b/yg/internal/opengl_win32.cpp index ad64f7d734..7f04a9f333 100644 --- a/yg/internal/opengl_win32.cpp +++ b/yg/internal/opengl_win32.cpp @@ -1,17 +1,18 @@ #include "opengl.hpp" -#include "../../3party/GL/glext.h" +//#include "../../3party/GL/glext.h" #include "../../base/logging.hpp" + namespace yg { namespace gl { - GL_FRAMEBUFFER_BINDING = GL_FRAMEBUFFER_BINDING_EXT; + //GL_FRAMEBUFFER_BINDING = GL_FRAMEBUFFER_BINDING_EXT; - template - TRet GetGLProc(HMODULE, char const * name) + template + void AssignGLProc(HMODULE, char const * name, T & res) { PROC p = ::wglGetProcAddress(name); if (p == 0) @@ -19,7 +20,7 @@ namespace yg DWORD const err = ::GetLastError(); LOG(LINFO, ("OpenGL extension function ", name, " not found. Last error = ", err)); } - return reinterpret_cast(p); + res = reinterpret_cast(p); } void InitExtensions() @@ -28,12 +29,12 @@ namespace yg // Loading procedures, trying "EXT" suffix if alias doesn't exist -#define DEFINE_GL_PROC_WIN32(type, name, fn) \ - fn = GetGLProc(hInst, name); \ - if (fn == NULL) - { - string extName = string(name) + "EXT"; - fn = GetGLProc(hInst, extName); +#define DEFINE_GL_PROC(name, fn) \ + AssignGLProc(hInst, name, fn); \ + if (fn == NULL) \ + { \ + string const extName = string(name) + "EXT"; \ + AssignGLProc(hInst, extName.c_str(), fn); \ } #include "gl_procedures.inl" #undef DEFINE_GL_PROC @@ -60,5 +61,3 @@ namespace yg } } } // namespace win32 - -#endif diff --git a/yg/render_state_updater.cpp b/yg/render_state_updater.cpp index 4ed863b107..410def523d 100644 --- a/yg/render_state_updater.cpp +++ b/yg/render_state_updater.cpp @@ -111,7 +111,7 @@ namespace yg shared_ptr command(new UpdateActualTarget()); command->m_renderState = m_renderState; command->m_currentScreen = m_renderState->m_currentScreen; - command->m_doSynchronize = renderQueue(); + command->m_doSynchronize = (renderQueue() != 0); processCommand(command);