From 0d7f7ac290133b46de48ae1ee41cfc897cbc927e Mon Sep 17 00:00:00 2001 From: toshinagata1964 Date: Mon, 17 Mar 2014 16:26:16 +0000 Subject: [PATCH] OpenGL extensions are implemented for Windows git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@475 a2be9bc6-48de-4e38-9406-05402d4bc13c --- Makefile | 2 +- wxSources/MoleculeView.cpp | 21 ++++- wxSources/OpenGL_extensions.c | 184 ++++++++++++++++++++++++++++++++++++++++++ wxSources/OpenGL_extensions.h | 112 +++++++++++++++++++++++++ 4 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 wxSources/OpenGL_extensions.c create mode 100755 wxSources/OpenGL_extensions.h diff --git a/Makefile b/Makefile index 3914cb4..2ad2af1 100755 --- a/Makefile +++ b/Makefile @@ -83,7 +83,7 @@ ortep3/ortep3$(EXE_SUFFIX) : make -f ../Makefile_ortep3 ifeq ($(TARGET_PLATFORM),MSW) -EXTRA_OBJECTS = listctrl.o window_msw.o textctrl_msw.o +EXTRA_OBJECTS = listctrl.o window_msw.o textctrl_msw.o OpenGL_extensions.o RESOURCE = molby_rc.o # The following HOMETEMP kludges are to work around a bug where '#include "..."' # does not work when the include path is on the C: drive whereas the source is diff --git a/wxSources/MoleculeView.cpp b/wxSources/MoleculeView.cpp index 9d27f0e..ebcbaca 100755 --- a/wxSources/MoleculeView.cpp +++ b/wxSources/MoleculeView.cpp @@ -39,6 +39,7 @@ #include "MySlider.h" #include "MyListCtrl.h" #include "../MolLib/Missing.h" +#include "../MolLib/Ruby_bind/Molby_extern.h" #include "MyMBConv.h" #include "MyProgressIndicator.h" @@ -48,6 +49,10 @@ #include "wx/choice.h" #include "wx/font.h" +#if defined(__WXMSW__) +#include "OpenGL_extensions.h" +#endif + //#include "../MolLib/Ruby_bind/Molby_extern.h" enum { @@ -373,7 +378,21 @@ MoleculeView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) // Set data source for the list control listctrl->SetDataSource(this); - + +#if defined(__WXMSW__) + // Initialize OpenGL extension + { + static int openGLExtension_inited = 0; + if (openGLExtension_inited == 0) { + if (InitializeOpenGLExtensions() != 0) { + MyAppCallback_errorMessageBox("Fatal internal error: cannot initialize OpenGL extensions"); + openGLExtension_inited = -1; + } else openGLExtension_inited = 1; + } + } + +#endif + return true; } diff --git a/wxSources/OpenGL_extensions.c b/wxSources/OpenGL_extensions.c new file mode 100644 index 0000000..2a3448b --- /dev/null +++ b/wxSources/OpenGL_extensions.c @@ -0,0 +1,184 @@ +/* + * OpenGL_extensions.c + * Molby + * + * Created by Toshi Nagata on 2014/03/17. + * Copyright 2008-2014 Toshi Nagata. All rights reserved. + * + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + */ + +/* Implement OpenGL extentions */ + +#include "OpenGL_extensions.h" + +/* Function pointers */ +static GLboolean (*p_glIsRenderbufferEXT)(GLuint renderbuffer); +static void (*p_glBindRenderbufferEXT)(GLenum target, GLuint renderbuffer); +static void (*p_glDeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); +static void (*p_glGenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); +static void (*p_glRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +static void (*p_glGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); +GLboolean (*p_glIsFramebufferEXT)(GLuint framebuffer); +static void (*p_glBindFramebufferEXT)(GLenum target, GLuint framebuffer); +static void (*p_glDeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); +static void (*p_glGenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); +static GLenum (*p_glCheckFramebufferStatusEXT)(GLenum target); +static void (*p_glFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +static void (*p_glFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +static void (*p_glFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +static void (*p_glFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +static void (*p_glGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +static void (*p_glGenerateMipmapEXT)(GLenum target); + +static int p_inited = 0; + +int +InitializeOpenGLExtensions(void) +{ + int n = 0; + p_glIsRenderbufferEXT = (void *)wglGetProcAddress("glIsRenderbufferEXT"); + if (p_glIsRenderbufferEXT == NULL) + n++; + p_glBindRenderbufferEXT = (void *)wglGetProcAddress("glBindRenderbufferEXT"); + if (p_glBindRenderbufferEXT == NULL) + n++; + p_glDeleteRenderbuffersEXT = (void *)wglGetProcAddress("glDeleteRenderbuffersEXT"); + if (p_glDeleteRenderbuffersEXT == NULL) + n++; + p_glGenRenderbuffersEXT = (void *)wglGetProcAddress("glGenRenderbuffersEXT"); + if (p_glGenRenderbuffersEXT == NULL) + n++; + p_glRenderbufferStorageEXT = (void *)wglGetProcAddress("glRenderbufferStorageEXT"); + if (p_glRenderbufferStorageEXT == NULL) + n++; + p_glGetRenderbufferParameterivEXT = (void *)wglGetProcAddress("glGetRenderbufferParameterivEXT"); + if (p_glGetRenderbufferParameterivEXT == NULL) + n++; + p_glIsFramebufferEXT = (void *)wglGetProcAddress("glIsFramebufferEXT"); + if (p_glIsFramebufferEXT == NULL) + n++; + p_glBindFramebufferEXT = (void *)wglGetProcAddress("glBindFramebufferEXT"); + if (p_glBindFramebufferEXT == NULL) + n++; + p_glDeleteFramebuffersEXT = (void *)wglGetProcAddress("glDeleteFramebuffersEXT"); + if (p_glDeleteFramebuffersEXT == NULL) + n++; + p_glGenFramebuffersEXT = (void *)wglGetProcAddress("glGenFramebuffersEXT"); + if (p_glGenFramebuffersEXT == NULL) + n++; + p_glCheckFramebufferStatusEXT = (void *)wglGetProcAddress("glCheckFramebufferStatusEXT"); + if (p_glCheckFramebufferStatusEXT == NULL) + n++; + p_glFramebufferTexture1DEXT = (void *)wglGetProcAddress("glFramebufferTexture1DEXT"); + if (p_glFramebufferTexture1DEXT == NULL) + n++; + p_glFramebufferTexture2DEXT = (void *)wglGetProcAddress("glFramebufferTexture2DEXT"); + if (p_glFramebufferTexture2DEXT == NULL) + n++; + p_glFramebufferTexture3DEXT = (void *)wglGetProcAddress("glFramebufferTexture3DEXT"); + if (p_glFramebufferTexture3DEXT == NULL) + n++; + p_glFramebufferRenderbufferEXT = (void *)wglGetProcAddress("glFramebufferRenderbufferEXT"); + if (p_glFramebufferRenderbufferEXT == NULL) + n++; + p_glGetFramebufferAttachmentParameterivEXT = (void *)wglGetProcAddress("glGetFramebufferAttachmentParameterivEXT"); + if (p_glGetFramebufferAttachmentParameterivEXT == NULL) + n++; + p_glGenerateMipmapEXT = (void *)wglGetProcAddress("glGenerateMipmapEXT"); + if (p_glGenerateMipmapEXT == NULL) + n++; + return n; +} + +GLboolean glIsRenderbufferEXT(GLuint renderbuffer) +{ + return (*p_glIsRenderbufferEXT)(renderbuffer); +} + +void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) +{ + (*p_glBindRenderbufferEXT)(target, renderbuffer); +} + +void glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers) +{ + (*p_glDeleteRenderbuffersEXT)(n, renderbuffers); +} + +void glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers) +{ + (*p_glGenRenderbuffersEXT)(n, renderbuffers); +} + +void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +{ + (*p_glRenderbufferStorageEXT)(target, internalformat, width, height); +} + +void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params) +{ + (*p_glGetRenderbufferParameterivEXT)(target, pname, params); +} + +GLboolean glIsFramebufferEXT(GLuint framebuffer) +{ + (*p_glIsFramebufferEXT)(framebuffer); +} + +void glBindFramebufferEXT(GLenum target, GLuint framebuffer) +{ + (*p_glBindFramebufferEXT)(target, framebuffer); +} + +void glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers) +{ + (*p_glDeleteFramebuffersEXT)(n, framebuffers); +} + +void glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers) +{ + (*p_glGenFramebuffersEXT)(n, framebuffers); +} + +GLenum glCheckFramebufferStatusEXT(GLenum target) +{ + return (*p_glCheckFramebufferStatusEXT)(target); +} + +void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ + (*p_glFramebufferTexture1DEXT)(target, attachment, textarget, texture, level); +} + +void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ + (*p_glFramebufferTexture2DEXT)(target, attachment, textarget, texture, level); +} + +void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) +{ + (*p_glFramebufferTexture3DEXT)(target, attachment, textarget, texture, level, zoffset); +} + +void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +{ + (*p_glFramebufferRenderbufferEXT)(target, attachment, renderbuffertarget, renderbuffer); +} + +void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params) +{ + (*p_glGetFramebufferAttachmentParameterivEXT)(target, attachment, pname, params); +} + +void glGenerateMipmapEXT(GLenum target) +{ + (*p_glGenerateMipmapEXT)(target); +} diff --git a/wxSources/OpenGL_extensions.h b/wxSources/OpenGL_extensions.h new file mode 100755 index 0000000..aed4b04 --- /dev/null +++ b/wxSources/OpenGL_extensions.h @@ -0,0 +1,112 @@ +/* + * OpenGL_extensions.h + * Molby + * + * Created by Toshi Nagata on 2014/03/17. + * Copyright 2014 Toshi Nagata. All rights reserved. + * + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation version 2 of the License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + */ + +/* Implement OpenGL extensions */ +/* (For Windows) */ + +#ifndef __OpenGL_extensions_h__ +#define __OpenGL_extensions_h__ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Constants */ +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 + +/* Functions */ +extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer); +extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer); +extern void glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers); +extern void glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers); +extern void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +extern void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params); +extern GLboolean glIsFramebufferEXT(GLuint framebuffer); +extern void glBindFramebufferEXT(GLenum target, GLuint framebuffer); +extern void glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers); +extern void glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers); +extern GLenum glCheckFramebufferStatusEXT(GLenum target); +extern void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +extern void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +extern void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +extern void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +extern void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params); +extern void glGenerateMipmapEXT(GLenum target); + +extern int InitializeOpenGLExtensions(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __OpenGL_extensions_h__ */ + -- 2.11.0