From 67b0e022364307332dd0383c22dfca5fb3c14467 Mon Sep 17 00:00:00 2001 From: skyjake Date: Tue, 12 Aug 2003 22:47:55 +0000 Subject: [PATCH] Added subtract and reverse subtract blending modes --- doomsday/Include/dglib.h | 4 ++++ doomsday/Include/r_model.h | 20 +++++++++++--------- doomsday/Src/drOpenGL/ext.c | 21 +++++++++++++++------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/doomsday/Include/dglib.h b/doomsday/Include/dglib.h index 315863fb8f..168213933c 100644 --- a/doomsday/Include/dglib.h +++ b/doomsday/Include/dglib.h @@ -125,6 +125,7 @@ enum DGL_PALETTED_GENMIPS, DGL_MODULATE_ADD_COMBINE, DGL_MODULATE_TEXTURE, + DGL_BLENDING_OP, DGL_TEXTURE0 = 0x5F00, DGL_TEXTURE1, @@ -147,6 +148,9 @@ enum DGL_SRC_ALPHA, DGL_ONE_MINUS_SRC_ALPHA, DGL_SRC_ALPHA_SATURATE, + DGL_ADD, + DGL_SUBTRACT, + DGL_REVERSE_SUBTRACT, // Comparative functions DGL_ALWAYS = 0x7000, diff --git a/doomsday/Include/r_model.h b/doomsday/Include/r_model.h index fa6611a2b1..de52af8c95 100644 --- a/doomsday/Include/r_model.h +++ b/doomsday/Include/r_model.h @@ -25,15 +25,17 @@ #define MFF_DARKSHADOW 0x2000 #define MFF_IDSKIN 0x4000 // Mobj id -> skin in skin range #define MFF_DISABLE_Z_WRITE 0x8000 -#define MFF_NO_DISTANCE_CHECK 0x10000 -#define MFF_SELSKIN 0x20000 -#define MFF_PARTICLE_SUB1 0x40000 // Sub1 center is particle origin. -#define MFF_NO_PARTICLES 0x80000 // No particles for this object. -#define MFF_SHINY_SPECULAR 0x100000 // Shiny skin rendered as additive. -#define MFF_SHINY_LIT 0x200000 // Shiny skin is not fullbright. -#define MFF_IDFRAME 0x400000 // Mobj id -> frame in frame range -#define MFF_IDANGLE 0x800000 // Mobj id -> static angle offset -#define MFF_DIM 0x1000000 // Never fullbright. +#define MFF_NO_DISTANCE_CHECK 0x00010000 +#define MFF_SELSKIN 0x00020000 +#define MFF_PARTICLE_SUB1 0x00040000 // Sub1 center is particle origin. +#define MFF_NO_PARTICLES 0x00080000 // No particles for this object. +#define MFF_SHINY_SPECULAR 0x00100000 // Shiny skin rendered as additive. +#define MFF_SHINY_LIT 0x00200000 // Shiny skin is not fullbright. +#define MFF_IDFRAME 0x00400000 // Mobj id -> frame in frame range +#define MFF_IDANGLE 0x00800000 // Mobj id -> static angle offset +#define MFF_DIM 0x01000000 // Never fullbright. +#define MFF_SUBTRACT 0x02000000 // Subtract blending. +#define MFF_REVERSE_SUBTRACT 0x04000000 // Reverse subtract blending. typedef struct { diff --git a/doomsday/Src/drOpenGL/ext.c b/doomsday/Src/drOpenGL/ext.c index 8addfee9a2..753f101a01 100644 --- a/doomsday/Src/drOpenGL/ext.c +++ b/doomsday/Src/drOpenGL/ext.c @@ -25,6 +25,7 @@ // PUBLIC DATA DEFINITIONS ------------------------------------------------- int extMultiTex; +int extBlendSub; int extTexEnvComb; int extNvTexEnvComb; int extAtiTexEnvComb; @@ -32,13 +33,15 @@ int extAniso; int extLockArray; int extGenMip; -PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTextureARB = 0; -PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = 0; -PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = 0; -PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB = 0; +PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTextureARB; +PFNGLACTIVETEXTUREARBPROC glActiveTextureARB; +PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB; +PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fvARB; -PFNGLLOCKARRAYSEXTPROC glLockArraysEXT = 0; -PFNGLUNLOCKARRAYSEXTPROC glUnlockArraysEXT = 0; +PFNGLBLENDEQUATIONEXTPROC glBlendEquationEXT; + +PFNGLLOCKARRAYSEXTPROC glLockArraysEXT; +PFNGLUNLOCKARRAYSEXTPROC glUnlockArraysEXT; // PRIVATE DATA DEFINITIONS ------------------------------------------------ @@ -111,6 +114,12 @@ void initExtensions(void) query("GL_EXT_shared_texture_palette", &sharedPalExtAvailable); query("GL_EXT_texture_filter_anisotropic", &extAniso); + // EXT_blend_subtract + if(query("GL_EXT_blend_subtract", &extBlendSub)) + { + GETPROC( glBlendEquationEXT ); + } + // ARB_texture_env_combine if(!query("GL_ARB_texture_env_combine", &extTexEnvComb)) {