Roderick Colenbrander : wined3d: Volume textures fix.

Alexandre Julliard julliard at wine.codeweavers.com
Sat Aug 5 04:41:15 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 3d9e96f3bc34029c93ceb3fd3f9674d2c69e414d
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=3d9e96f3bc34029c93ceb3fd3f9674d2c69e414d

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Sat Aug  5 00:11:17 2006 +0200

wined3d: Volume textures fix.

---

 dlls/wined3d/directx.c    |   11 +++++++++--
 dlls/wined3d/volume.c     |   34 +++++++++++++++++++---------------
 include/wine/wined3d_gl.h |   18 ++++++++++++++++++
 3 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index f621d86..04cd41d 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -680,6 +680,9 @@ #undef USE_GL_FUNC
             } else if (strcmp(ThisExtn, "GL_EXT_stencil_wrap") == 0) {
                 TRACE_(d3d_caps)(" FOUND: EXT Stencil wrap support\n");
                 gl_info->supported[EXT_STENCIL_WRAP] = TRUE;
+            } else if (strcmp(ThisExtn, "GL_EXT_texture3D") == 0) {
+                TRACE_(d3d_caps)(" FOUND: EXT_texture3D support\n");
+                gl_info->supported[EXT_TEXTURE3D] = TRUE;
             } else if (strcmp(ThisExtn, "GL_EXT_texture_compression_s3tc") == 0) {
                 TRACE_(d3d_caps)(" FOUND: EXT Texture S3TC compression support\n");
                 gl_info->supported[EXT_TEXTURE_COMPRESSION_S3TC] = TRUE;
@@ -1803,13 +1806,17 @@ #endif
     *pCaps->TextureCaps =  WINED3DPTEXTURECAPS_ALPHA              |
                            WINED3DPTEXTURECAPS_ALPHAPALETTE       |
                            WINED3DPTEXTURECAPS_BORDER             |
-                           WINED3DPTEXTURECAPS_VOLUMEMAP          |
                            WINED3DPTEXTURECAPS_MIPMAP             |
                            WINED3DPTEXTURECAPS_PROJECTED          |
                            WINED3DPTEXTURECAPS_PERSPECTIVE        |
-                           WINED3DPTEXTURECAPS_VOLUMEMAP_POW2     |
                            WINED3DPTEXTURECAPS_NONPOW2CONDITIONAL;
 
+    if( GL_SUPPORT(EXT_TEXTURE3D)) {
+        *pCaps->TextureCaps |=  WINED3DPTEXTURECAPS_VOLUMEMAP      |
+                                WINED3DPTEXTURECAPS_MIPVOLUMEMAP   |
+                                WINED3DPTEXTURECAPS_VOLUMEMAP_POW2;
+    }
+
     if (GL_SUPPORT(ARB_TEXTURE_CUBE_MAP)) {
         *pCaps->TextureCaps |= WINED3DPTEXTURECAPS_CUBEMAP     |
                              WINED3DPTEXTURECAPS_MIPCUBEMAP    |
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 82a1d87..5a10b13 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -24,7 +24,7 @@ #include "config.h"
 #include "wined3d_private.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(d3d);
-#define GLINFO_LOCATION ((IWineD3DImpl *)(((IWineD3DDeviceImpl *)This->wineD3DDevice)->wineD3D))->gl_info
+#define GLINFO_LOCATION ((IWineD3DImpl *)(((IWineD3DDeviceImpl *)This->resource.wineD3DDevice)->wineD3D))->gl_info
 
 /* *******************************************
    IWineD3DVolume IUnknown parts follow
@@ -285,18 +285,19 @@ static HRESULT WINAPI IWineD3DVolumeImpl
     IWineD3DVolumeImpl *This     = (IWineD3DVolumeImpl *)iface;
     const PixelFormatDesc *formatEntry = getFormatDescEntry(This->resource.format);
 
-    TRACE("Calling glTexImage3D %x level=%d, intfmt=%x, w=%d, h=%d,d=%d, 0=%d, glFmt=%x, glType=%x, Mem=%p\n",
-            GL_TEXTURE_3D,
-            gl_level,
-            formatEntry->glInternal,
-            This->currentDesc.Width,
-            This->currentDesc.Height,
-            This->currentDesc.Depth,
-            0,
-            formatEntry->glFormat,
-            formatEntry->glType,
-            This->resource.allocatedMemory);
-    glTexImage3D(GL_TEXTURE_3D,
+    if(GL_SUPPORT(EXT_TEXTURE3D)) {
+        TRACE("Calling glTexImage3D %x level=%d, intfmt=%x, w=%d, h=%d,d=%d, 0=%d, glFmt=%x, glType=%x, Mem=%p\n",
+                GL_TEXTURE_3D,
+                gl_level,
+                formatEntry->glInternal,
+                This->currentDesc.Width,
+                This->currentDesc.Height,
+                This->currentDesc.Depth,
+                0,
+                formatEntry->glFormat,
+                formatEntry->glType,
+                This->resource.allocatedMemory);
+        GL_EXTCALL(glTexImage3DEXT(GL_TEXTURE_3D,
                     gl_level,
                     formatEntry->glInternal,
                     This->currentDesc.Width,
@@ -305,8 +306,11 @@ static HRESULT WINAPI IWineD3DVolumeImpl
                     0,
                     formatEntry->glFormat,
                     formatEntry->glType,
-                    This->resource.allocatedMemory);
-    checkGLcall("glTexImage3D");
+                    This->resource.allocatedMemory));
+        checkGLcall("glTexImage3D");
+    } else
+        WARN("This OpenGL implementation doesn't support 3D textures\n");
+    
     return WINED3D_OK;
 
 }
diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h
index d9b075c..923ca4a 100644
--- a/include/wine/wined3d_gl.h
+++ b/include/wine/wined3d_gl.h
@@ -350,6 +350,20 @@ #define GL_DISTANCE_ATTENUATION_EXT     
 #endif
 typedef void (APIENTRY * PGLFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
 typedef void (APIENTRY * PGLFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+/* GL_EXT_texture3D */
+#ifndef GL_EXT_texture3D
+#define GL_PACK_SKIP_IMAGES_EXT           0x806B
+#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
+#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
+#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
+#define GL_TEXTURE_3D_EXT                 0x806F
+#define GL_PROXY_TEXTURE_3D_EXT           0x8070
+#define GL_TEXTURE_DEPTH_EXT              0x8071
+#define GL_TEXTURE_WRAP_R_EXT             0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
+#endif
+typedef void (APIENTRY * PGLFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PGLFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
 /* GL_EXT_texture_env_combine */
 #ifndef GL_EXT_texture_env_combine
 #define GL_EXT_texture_env_combine 1
@@ -1373,6 +1387,7 @@ typedef enum _GL_SupportedExt {
   EXT_SECONDARY_COLOR,
   EXT_STENCIL_TWO_SIDE,
   EXT_STENCIL_WRAP,
+  EXT_TEXTURE3D,
   EXT_TEXTURE_COMPRESSION_S3TC,
   EXT_TEXTURE_FILTER_ANISOTROPIC,
   EXT_TEXTURE_LOD,
@@ -1482,6 +1497,9 @@ #define GL_EXT_FUNCS_GEN \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC,       glSecondaryColor3fEXT); \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC,      glSecondaryColor3fvEXT); \
     USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC,  glSecondaryColorPointerEXT); \
+    /* GL_EXT_texture3D */ \
+    USE_GL_FUNC(PGLFNGLTEXIMAGE3DEXTPROC,              glTexImage3DEXT); \
+    USE_GL_FUNC(PGLFNGLTEXSUBIMAGE3DEXTPROC,           glTexSubImage3DEXT); \
     /* GL_ARB_vertex_program */ \
     USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC,              glGenProgramsARB); \
     USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC,              glBindProgramARB); \




More information about the wine-cvs mailing list