Skip to content

Commit 1e6353a

Browse files
committed
Fix missing 'FBO shim' for glFramebufferTexture3D
Provide the alternative function to use if GL_ARB_framebuffer_object is not available but GL_EXT_framebuffer_object is. The missing shim could result in a crash if the former extension is not available and dynamic lights are enabled.
1 parent 8a80897 commit 1e6353a

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/engine/renderer/tr_fbo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ void R_AttachFBOTexture1D( int texId, int index )
142142
return;
143143
}
144144

145-
glFramebufferTexture1D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_1D, texId, 0 );
145+
GL_fboShim.glFramebufferTexture1D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_1D, texId, 0 );
146146
}
147147

148148
/*
@@ -180,7 +180,7 @@ void R_AttachFBOTexture3D( int texId, int index, int zOffset )
180180
return;
181181
}
182182

183-
glFramebufferTexture3D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_3D, texId, 0, zOffset );
183+
GL_fboShim.glFramebufferTexture3D( GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_3D, texId, 0, zOffset );
184184
}
185185

186186
/*

src/engine/renderer/tr_local.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,12 @@ struct glFboShim_t
223223
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
224224
// void (*glFramebufferRenderbuffer) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
225225
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
226+
// void (*glFramebufferTexture1D) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
227+
PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
226228
// void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
227229
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
230+
// void (*glFramebufferTexture3D) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
231+
PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
228232
// void (*glGenerateMipmap) (GLenum target);
229233
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
230234
// void (*glGenFramebuffers) (GLsizei n, GLuint *framebuffers);
@@ -263,7 +267,9 @@ static inline void glFboSetArb()
263267
GL_fboShim.glDeleteFramebuffers = glDeleteFramebuffers;
264268
GL_fboShim.glDeleteRenderbuffers = glDeleteRenderbuffers;
265269
GL_fboShim.glFramebufferRenderbuffer = glFramebufferRenderbuffer;
270+
GL_fboShim.glFramebufferTexture1D = glFramebufferTexture1D;
266271
GL_fboShim.glFramebufferTexture2D = glFramebufferTexture2D;
272+
GL_fboShim.glFramebufferTexture3D = glFramebufferTexture3D;
267273
GL_fboShim.glGenerateMipmap = glGenerateMipmap;
268274
GL_fboShim.glGenFramebuffers = glGenFramebuffers;
269275
GL_fboShim.glGenRenderbuffers = glGenRenderbuffers;
@@ -283,7 +289,9 @@ static inline void glFboSetExt()
283289
GL_fboShim.glDeleteFramebuffers = glDeleteFramebuffersEXT;
284290
GL_fboShim.glDeleteRenderbuffers = glDeleteRenderbuffersEXT;
285291
GL_fboShim.glFramebufferRenderbuffer = glFramebufferRenderbufferEXT;
292+
GL_fboShim.glFramebufferTexture1D = glFramebufferTexture1DEXT;
286293
GL_fboShim.glFramebufferTexture2D = glFramebufferTexture2DEXT;
294+
GL_fboShim.glFramebufferTexture3D = glFramebufferTexture3DEXT;
287295
GL_fboShim.glGenerateMipmap = glGenerateMipmapEXT;
288296
GL_fboShim.glGenFramebuffers = glGenFramebuffersEXT;
289297
GL_fboShim.glGenRenderbuffers = glGenRenderbuffersEXT;

0 commit comments

Comments
 (0)