bilateral upscale option for SSAO

master
Lee Salzman 2013-02-11 01:44:57 +02:00
parent 9a3acad3d2
commit fa8b5f2e00
10 changed files with 639 additions and 502 deletions

View File

@ -2405,85 +2405,98 @@ bilateralvariantshader = [
reduced = (>= (strstr $arg2 "r") 0)
linear = (>= (strstr $arg2 "l") 0)
packed = (>= (strstr $arg2 "p") 0)
upscaled = (>= (strstr $arg2 "u") 0)
numtaps = $arg3
filterdir = $arg4
shader 0 $arg1 [
void main(void)
{
gl_Position = gl_Vertex;
@(? (&& (! $linear) $reduced) [gl_TexCoord[0].xy = gl_MultiTexCoord0.xy;])
@(? (&& $reduced [|| $upscaled [! $packed]]) [gl_TexCoord[0].xy = gl_MultiTexCoord0.xy;])
@(? $upscaled [gl_TexCoord[1].xy = gl_MultiTexCoord1.xy;])
}
] [
#extension GL_ARB_texture_rectangle : enable
uniform sampler2DRect tex0;
@(? (! $packed) [uniform sampler2DRect tex1;])
uniform vec4 bilateralparams;
@(? (=s $filterdir "x") [
#define tapoffset(i) vec2(i, 0.0)
#define viewoffset(i) vec2(i*bilateralparams.z, 0.0)
] [
#define tapoffset(i) vec2(0.0, i)
#define viewoffset(i) vec2(0.0, i*bilateralparams.w)
])
@(? (|| $upscaled [! $packed]) [uniform sampler2DRect tex1, tex2;])
uniform vec3 bilateralparams;
@(gdepthunpackparams)
uniform vec3 gdepthpackparams;
void main(void)
{
@(if $linear [if $packed [
#define tc @(? $upscaled [gl_TexCoord[1].xy] [gl_FragCoord.xy])
#define depthtc @(? $reduced [gl_TexCoord[0].xy] [gl_FragCoord.xy])
#define tapoffset(i) @(? (=s $filterdir "x") [vec2(i, 0.0)] [vec2(0.0, i)])
#define depthoffset(i) tapoffset(i*bilateralparams.z)
@(cond [$packed] [
if $aodepthformat [result [
vec2 vals = texture2DRect(tex0, gl_FragCoord.xy).rg;
vec2 vals = texture2DRect(tex0, tc).rg;
#define color vals.x
#define depth vals.y
@(if $upscaled [gdepthunpack depth tex2 depthtc] [result [
#define depth vals.y
]])
]] [result [
vec4 vals = texture2DRect(tex0, gl_FragCoord.xy);
vec4 vals = texture2DRect(tex0, tc);
#define color vals.a
float depth = dot(vals.rgb, gdepthunpackparams);
@(if $upscaled [gdepthunpack depth tex2 depthtc] [result [
float depth = dot(vals.rgb, gdepthunpackparams);
]])
]]
] [result [
float color = texture2DRect(tex0, gl_FragCoord.xy).r;
] [$linear] [result [
float color = texture2DRect(tex0, tc).r;
@(if $aodepthformat [result [
float depth = texture2DRect(tex1, gl_FragCoord.xy).r;
float depth = texture2DRect(tex1, depthtc).r;
]] [result [
float depth = dot(texture2DRect(tex1, gl_FragCoord.xy).rgb, gdepthunpackparams);
float depth = dot(texture2DRect(tex1, depthtc).rgb, gdepthunpackparams);
]])
]]] [if $reduced [result [
float color = texture2DRect(tex0, gl_FragCoord.xy).r;
@(gdepthunpack depth tex1 gl_TexCoord[0].xy)
]] [result [
float color = texture2DRect(tex0, gl_FragCoord.xy).r;
@(gdepthunpack depth tex1 gl_FragCoord.xy)
]]])
float color = texture2DRect(tex0, tc).r;
@(gdepthunpack depth tex2 depthtc)
]])
float weights = 1.0;
@(loopconcat i (* 2 $numtaps) [
curtap = (- $i $numtaps)
if (>= $curtap 0) [curtap = (+ $curtap 1)]
curtapoffset = (*f $curtap 2)
result [
@(if $linear [if $packed [
@(cond [$packed] [
if $aodepthformat [result [
vec2 vals@[i] = texture2DRect(tex0, gl_FragCoord.xy + tapoffset(@curtapoffset)).rg;
vec2 vals@[i] = texture2DRect(tex0, tc + tapoffset(@curtapoffset)).rg;
#define color@[i] vals@[i].x
#define depth@[i] vals@[i].y
]] [result [
vec4 vals@[i] = texture2DRect(tex0, gl_FragCoord.xy + tapoffset(@curtapoffset));
vec4 vals@[i] = texture2DRect(tex0, tc + tapoffset(@curtapoffset));
#define color@[i] vals@[i].a
float depth@[i] = dot(vals@[i].rgb, gdepthunpackparams);
]]
] [result [
vec2 tc@[i] = gl_FragCoord.xy + tapoffset(@curtapoffset);
float color@[i] = texture2DRect(tex0, tc@[i]).r;
@(if $aodepthformat [result [
float depth@[i] = texture2DRect(tex1, tc@[i]).r;
] [$linear] [
if $reduced [result [
@(
float color@[i] = texture2DRect(tex0, tc + tapoffset(@curtapoffset)).r;
@(if $aodepthformat [result [
float depth@[i] = texture2DRect(tex1, depthtc + depthoffset(@curtapoffset)).r;
]] [result [
float depth@[i] = dot(texture2DRect(tex1, depthtc + depthoffset(@curtapoffset)).rgb, gdepthunpackparams);
]])
]] [result [
float depth@[i] = dot(texture2DRect(tex1, tc@[i]).rgb, gdepthunpackparams);
]])
]]] [if $reduced [result [
float color@[i] = texture2DRect(tex0, gl_FragCoord.xy + tapoffset(@curtapoffset)).r;
@(gdepthunpack [depth@[i]] tex1 [gl_TexCoord[0].xy + viewoffset(@curtapoffset)])
]] [result [
vec2 tc@[i] = gl_FragCoord.xy + tapoffset(@curtapoffset);
float color@[i] = texture2DRect(tex0, tc@[i]).r;
@(gdepthunpack [depth@[i]] tex1 [tc@[i]])
]]])
vec2 tc@[i] = tc + tapoffset(@curtapoffset);
float color@[i] = texture2DRect(tex0, tc@[i]).r;
@(if $aodepthformat [result [
float depth@[i] = texture2DRect(tex1, tc@[i]).r;
]] [result [
float depth@[i] = dot(texture2DRect(tex1, tc@[i]).rgb, gdepthunpackparams);
]])
]]
] [
if $reduced [result [
float color@[i] = texture2DRect(tex0, tc + tapoffset(@curtapoffset)).r;
@(gdepthunpack [depth@[i]] tex2 [depthtc + depthoffset(@curtapoffset)])
]] [result [
vec2 tc@[i] = tc + tapoffset(@curtapoffset);
float color@[i] = texture2DRect(tex0, tc@[i]).r;
@(gdepthunpack [depth@[i]] tex2 [tc@[i]])
]]
])
depth@[i] -= depth;
float weight@[i] = exp(@(-f 0 (* $curtap $curtap))*bilateralparams.x - depth@[i]*depth@[i]*bilateralparams.y);
weights += weight@[i];
@ -2494,7 +2507,10 @@ bilateralvariantshader = [
if $aodepthformat [result [
gl_FragColor.rg = vec2(color / weights, depth);
]] [result [
gl_FragColor = vec4(vals.rgb, color / weights);
@(if $upscaled [gpackdepth packdepth depth] [result [
#define packdepth vals.rgb
]])
gl_FragColor = vec4(packdepth, color / weights);
]]
] [result [
gl_FragColor = vec4(color / weights, 0.0, 0.0, 1.0);

View File

@ -220,172 +220,191 @@ shared/zip.o: shared/command.h shared/iengine.h shared/igame.h
engine/3dgui.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/3dgui.o: shared/ents.h shared/command.h shared/iengine.h
engine/3dgui.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/3dgui.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/3dgui.o: engine/textedit.h
engine/3dgui.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/3dgui.o: engine/varray.h engine/textedit.h
engine/aa.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/aa.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
engine/aa.o: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/aa.o: engine/texture.h engine/model.h engine/varray.h engine/AreaTex.h
engine/aa.o: engine/SearchTex.h
engine/aa.o: engine/glexts.h engine/texture.h engine/model.h engine/varray.h
engine/aa.o: engine/AreaTex.h engine/SearchTex.h
engine/bih.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/bih.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
engine/bih.o: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/bih.o: engine/texture.h engine/model.h engine/varray.h
engine/bih.o: engine/glexts.h engine/texture.h engine/model.h engine/varray.h
engine/blend.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/blend.o: shared/ents.h shared/command.h shared/iengine.h
engine/blend.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/blend.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/blend.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/blend.o: engine/varray.h
engine/client.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/client.o: shared/ents.h shared/command.h shared/iengine.h
engine/client.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/client.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/client.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/client.o: engine/varray.h
engine/command.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/command.o: shared/ents.h shared/command.h shared/iengine.h
engine/command.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/command.o: engine/bih.h engine/texture.h engine/model.h
engine/command.o: engine/varray.h
engine/command.o: engine/bih.h engine/glexts.h engine/texture.h
engine/command.o: engine/model.h engine/varray.h
engine/console.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/console.o: shared/ents.h shared/command.h shared/iengine.h
engine/console.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/console.o: engine/bih.h engine/texture.h engine/model.h
engine/console.o: engine/varray.h
engine/console.o: engine/bih.h engine/glexts.h engine/texture.h
engine/console.o: engine/model.h engine/varray.h
engine/decal.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/decal.o: shared/ents.h shared/command.h shared/iengine.h
engine/decal.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/decal.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/decal.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/decal.o: engine/varray.h
engine/dynlight.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/dynlight.o: shared/ents.h shared/command.h shared/iengine.h
engine/dynlight.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/dynlight.o: engine/bih.h engine/texture.h engine/model.h
engine/dynlight.o: engine/varray.h
engine/dynlight.o: engine/bih.h engine/glexts.h engine/texture.h
engine/dynlight.o: engine/model.h engine/varray.h
engine/grass.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/grass.o: shared/ents.h shared/command.h shared/iengine.h
engine/grass.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/grass.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/grass.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/grass.o: engine/varray.h
engine/light.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/light.o: shared/ents.h shared/command.h shared/iengine.h
engine/light.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/light.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/light.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/light.o: engine/varray.h
engine/main.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/main.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
engine/main.o: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/main.o: engine/texture.h engine/model.h engine/varray.h
engine/main.o: engine/glexts.h engine/texture.h engine/model.h
engine/main.o: engine/varray.h
engine/material.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/material.o: shared/ents.h shared/command.h shared/iengine.h
engine/material.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/material.o: engine/bih.h engine/texture.h engine/model.h
engine/material.o: engine/varray.h
engine/material.o: engine/bih.h engine/glexts.h engine/texture.h
engine/material.o: engine/model.h engine/varray.h
engine/menus.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/menus.o: shared/ents.h shared/command.h shared/iengine.h
engine/menus.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/menus.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/menus.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/menus.o: engine/varray.h
engine/movie.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/movie.o: shared/ents.h shared/command.h shared/iengine.h
engine/movie.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/movie.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/movie.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/movie.o: engine/varray.h
engine/normal.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/normal.o: shared/ents.h shared/command.h shared/iengine.h
engine/normal.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/normal.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/normal.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/normal.o: engine/varray.h
engine/octa.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/octa.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
engine/octa.o: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/octa.o: engine/texture.h engine/model.h engine/varray.h
engine/octa.o: engine/glexts.h engine/texture.h engine/model.h
engine/octa.o: engine/varray.h
engine/octaedit.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/octaedit.o: shared/ents.h shared/command.h shared/iengine.h
engine/octaedit.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/octaedit.o: engine/bih.h engine/texture.h engine/model.h
engine/octaedit.o: engine/varray.h
engine/octaedit.o: engine/bih.h engine/glexts.h engine/texture.h
engine/octaedit.o: engine/model.h engine/varray.h
engine/octarender.o: engine/engine.h shared/cube.h shared/tools.h
engine/octarender.o: shared/geom.h shared/ents.h shared/command.h
engine/octarender.o: shared/iengine.h shared/igame.h engine/world.h
engine/octarender.o: engine/octa.h engine/light.h engine/bih.h
engine/octarender.o: engine/texture.h engine/model.h engine/varray.h
engine/octarender.o: engine/glexts.h engine/texture.h engine/model.h
engine/octarender.o: engine/varray.h
engine/physics.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/physics.o: shared/ents.h shared/command.h shared/iengine.h
engine/physics.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/physics.o: engine/bih.h engine/texture.h engine/model.h
engine/physics.o: engine/varray.h engine/mpr.h
engine/physics.o: engine/bih.h engine/glexts.h engine/texture.h
engine/physics.o: engine/model.h engine/varray.h engine/mpr.h
engine/pvs.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/pvs.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
engine/pvs.o: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/pvs.o: engine/texture.h engine/model.h engine/varray.h
engine/pvs.o: engine/glexts.h engine/texture.h engine/model.h engine/varray.h
engine/rendergl.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/rendergl.o: shared/ents.h shared/command.h shared/iengine.h
engine/rendergl.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/rendergl.o: engine/bih.h engine/texture.h engine/model.h
engine/rendergl.o: engine/varray.h
engine/rendergl.o: engine/bih.h engine/glexts.h engine/texture.h
engine/rendergl.o: engine/model.h engine/varray.h
engine/renderlights.o: engine/engine.h shared/cube.h shared/tools.h
engine/renderlights.o: shared/geom.h shared/ents.h shared/command.h
engine/renderlights.o: shared/iengine.h shared/igame.h engine/world.h
engine/renderlights.o: engine/octa.h engine/light.h engine/bih.h
engine/renderlights.o: engine/texture.h engine/model.h engine/varray.h
engine/renderlights.o: engine/glexts.h engine/texture.h engine/model.h
engine/renderlights.o: engine/varray.h
engine/rendermodel.o: engine/engine.h shared/cube.h shared/tools.h
engine/rendermodel.o: shared/geom.h shared/ents.h shared/command.h
engine/rendermodel.o: shared/iengine.h shared/igame.h engine/world.h
engine/rendermodel.o: engine/octa.h engine/light.h engine/bih.h
engine/rendermodel.o: engine/texture.h engine/model.h engine/varray.h
engine/rendermodel.o: engine/ragdoll.h engine/animmodel.h engine/vertmodel.h
engine/rendermodel.o: engine/skelmodel.h engine/hitzone.h engine/md2.h
engine/rendermodel.o: engine/md3.h engine/md5.h engine/obj.h engine/smd.h
engine/rendermodel.o: engine/iqm.h
engine/rendermodel.o: engine/glexts.h engine/texture.h engine/model.h
engine/rendermodel.o: engine/varray.h engine/ragdoll.h engine/animmodel.h
engine/rendermodel.o: engine/vertmodel.h engine/skelmodel.h engine/hitzone.h
engine/rendermodel.o: engine/md2.h engine/md3.h engine/md5.h engine/obj.h
engine/rendermodel.o: engine/smd.h engine/iqm.h
engine/renderparticles.o: engine/engine.h shared/cube.h shared/tools.h
engine/renderparticles.o: shared/geom.h shared/ents.h shared/command.h
engine/renderparticles.o: shared/iengine.h shared/igame.h engine/world.h
engine/renderparticles.o: engine/octa.h engine/light.h engine/bih.h
engine/renderparticles.o: engine/texture.h engine/model.h engine/varray.h
engine/renderparticles.o: engine/explosion.h engine/lensflare.h
engine/renderparticles.o: engine/lightning.h
engine/renderparticles.o: engine/glexts.h engine/texture.h engine/model.h
engine/renderparticles.o: engine/varray.h engine/explosion.h
engine/renderparticles.o: engine/lensflare.h engine/lightning.h
engine/rendersky.o: engine/engine.h shared/cube.h shared/tools.h
engine/rendersky.o: shared/geom.h shared/ents.h shared/command.h
engine/rendersky.o: shared/iengine.h shared/igame.h engine/world.h
engine/rendersky.o: engine/octa.h engine/light.h engine/bih.h
engine/rendersky.o: engine/octa.h engine/light.h engine/bih.h engine/glexts.h
engine/rendersky.o: engine/texture.h engine/model.h engine/varray.h
engine/rendertext.o: engine/engine.h shared/cube.h shared/tools.h
engine/rendertext.o: shared/geom.h shared/ents.h shared/command.h
engine/rendertext.o: shared/iengine.h shared/igame.h engine/world.h
engine/rendertext.o: engine/octa.h engine/light.h engine/bih.h
engine/rendertext.o: engine/texture.h engine/model.h engine/varray.h
engine/rendertext.o: engine/glexts.h engine/texture.h engine/model.h
engine/rendertext.o: engine/varray.h
engine/renderva.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/renderva.o: shared/ents.h shared/command.h shared/iengine.h
engine/renderva.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/renderva.o: engine/bih.h engine/texture.h engine/model.h
engine/renderva.o: engine/varray.h
engine/renderva.o: engine/bih.h engine/glexts.h engine/texture.h
engine/renderva.o: engine/model.h engine/varray.h
engine/server.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/server.o: shared/ents.h shared/command.h shared/iengine.h
engine/server.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/server.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/server.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/server.o: engine/varray.h
engine/serverbrowser.o: engine/engine.h shared/cube.h shared/tools.h
engine/serverbrowser.o: shared/geom.h shared/ents.h shared/command.h
engine/serverbrowser.o: shared/iengine.h shared/igame.h engine/world.h
engine/serverbrowser.o: engine/octa.h engine/light.h engine/bih.h
engine/serverbrowser.o: engine/texture.h engine/model.h engine/varray.h
engine/serverbrowser.o: engine/glexts.h engine/texture.h engine/model.h
engine/serverbrowser.o: engine/varray.h
engine/shader.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/shader.o: shared/ents.h shared/command.h shared/iengine.h
engine/shader.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/shader.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/shader.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/shader.o: engine/varray.h
engine/sound.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/sound.o: shared/ents.h shared/command.h shared/iengine.h
engine/sound.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/sound.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/sound.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/sound.o: engine/varray.h
engine/texture.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/texture.o: shared/ents.h shared/command.h shared/iengine.h
engine/texture.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/texture.o: engine/bih.h engine/texture.h engine/model.h
engine/texture.o: engine/varray.h engine/scale.h
engine/texture.o: engine/bih.h engine/glexts.h engine/texture.h
engine/texture.o: engine/model.h engine/varray.h engine/scale.h
engine/water.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/water.o: shared/ents.h shared/command.h shared/iengine.h
engine/water.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/water.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/water.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/water.o: engine/varray.h
engine/world.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/world.o: shared/ents.h shared/command.h shared/iengine.h
engine/world.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/world.o: engine/bih.h engine/texture.h engine/model.h engine/varray.h
engine/world.o: engine/bih.h engine/glexts.h engine/texture.h engine/model.h
engine/world.o: engine/varray.h
engine/worldio.o: engine/engine.h shared/cube.h shared/tools.h shared/geom.h
engine/worldio.o: shared/ents.h shared/command.h shared/iengine.h
engine/worldio.o: shared/igame.h engine/world.h engine/octa.h engine/light.h
engine/worldio.o: engine/bih.h engine/texture.h engine/model.h
engine/worldio.o: engine/varray.h
engine/worldio.o: engine/bih.h engine/glexts.h engine/texture.h
engine/worldio.o: engine/model.h engine/varray.h
fpsgame/ai.o: fpsgame/game.h shared/cube.h shared/tools.h shared/geom.h
fpsgame/ai.o: shared/ents.h shared/command.h shared/iengine.h shared/igame.h
fpsgame/ai.o: fpsgame/ai.h
@ -421,7 +440,8 @@ shared/cube.h.gch: shared/command.h shared/iengine.h shared/igame.h
engine/engine.h.gch: shared/cube.h shared/tools.h shared/geom.h shared/ents.h
engine/engine.h.gch: shared/command.h shared/iengine.h shared/igame.h
engine/engine.h.gch: engine/world.h engine/octa.h engine/light.h engine/bih.h
engine/engine.h.gch: engine/texture.h engine/model.h engine/varray.h
engine/engine.h.gch: engine/glexts.h engine/texture.h engine/model.h
engine/engine.h.gch: engine/varray.h
fpsgame/game.h.gch: shared/cube.h shared/tools.h shared/geom.h shared/ents.h
fpsgame/game.h.gch: shared/command.h shared/iengine.h shared/igame.h
fpsgame/game.h.gch: fpsgame/ai.h

View File

@ -9,189 +9,9 @@
#include "octa.h"
#include "light.h"
#include "bih.h"
#include "glexts.h"
#include "texture.h"
#include "model.h"
// GL_ARB_multitexture
extern PFNGLACTIVETEXTUREARBPROC glActiveTexture_;
extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTexture_;
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2f_;
extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3f_;
extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4f_;
// GL_ARB_vertex_buffer_object
extern PFNGLGENBUFFERSARBPROC glGenBuffers_;
extern PFNGLBINDBUFFERARBPROC glBindBuffer_;
extern PFNGLMAPBUFFERARBPROC glMapBuffer_;
extern PFNGLUNMAPBUFFERARBPROC glUnmapBuffer_;
extern PFNGLBUFFERDATAARBPROC glBufferData_;
extern PFNGLBUFFERSUBDATAARBPROC glBufferSubData_;
extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffers_;
extern PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubData_;
// GL_ARB_occlusion_query
extern PFNGLGENQUERIESARBPROC glGenQueries_;
extern PFNGLDELETEQUERIESARBPROC glDeleteQueries_;
extern PFNGLBEGINQUERYARBPROC glBeginQuery_;
extern PFNGLENDQUERYARBPROC glEndQuery_;
extern PFNGLGETQUERYIVARBPROC glGetQueryiv_;
extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectiv_;
extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuiv_;
// GL_EXT_timer_query
#ifndef GL_EXT_timer_query
#define GL_TIME_ELAPSED_EXT 0x88BF
typedef llong GLint64EXT;
typedef ullong GLuint64EXT;
typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
#endif
extern PFNGLGETQUERYOBJECTI64VEXTPROC glGetQueryObjecti64v_;
extern PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64v_;
// GL_EXT_framebuffer_object
extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbuffer_;
extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffers_;
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenRenderbuffers_;
extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorage_;
extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatus_;
extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebuffer_;
extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffers_;
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffers_;
extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1D_;
extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2D_;
extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3D_;
extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbuffer_;
extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmap_;
// GL_ARB_draw_buffers
extern PFNGLDRAWBUFFERSARBPROC glDrawBuffers_;
// GL_EXT_framebuffer_blit
#ifndef GL_EXT_framebuffer_blit
#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
#endif
extern PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebuffer_;
// GL_EXT_draw_range_elements
extern PFNGLDRAWRANGEELEMENTSEXTPROC glDrawRangeElements_;
// GL_EXT_blend_minmax
extern PFNGLBLENDEQUATIONEXTPROC glBlendEquation_;
// GL_EXT_blend_color
extern PFNGLBLENDCOLOREXTPROC glBlendColor_;
// GL_EXT_multi_draw_arrays
extern PFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArrays_;
extern PFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElements_;
// GL_EXT_packed_depth_stencil
#ifndef GL_DEPTH_STENCIL_EXT
#define GL_DEPTH_STENCIL_EXT 0x84F9
#endif
#ifndef GL_DEPTH24_STENCIL8_EXT
#define GL_DEPTH24_STENCIL8_EXT 0x88F0
#endif
#ifndef GL_UNSIGNED_INT_24_8_EXT
#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
#endif
// GL_EXT_packed_float
#ifndef GL_R11F_G11F_B10F_EXT
#define GL_R11F_G11F_B10F_EXT 0x8C3A
#endif
// GL_ARB_texture_compression
extern PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glCompressedTexImage3D_;
extern PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2D_;
extern PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glCompressedTexImage1D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glCompressedTexSubImage3D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glCompressedTexSubImage2D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glCompressedTexSubImage1D_;
extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImage_;
// GL_ARB_texture_rg
#ifndef GL_ARB_texture_rg
#define GL_RG 0x8227
#define GL_R8 0x8229
#define GL_R16 0x822A
#define GL_RG8 0x822B
#define GL_RG16 0x822C
#define GL_R16F 0x822D
#define GL_R32F 0x822E
#define GL_RG16F 0x822F
#define GL_RG32F 0x8230
#endif
// GL_EXT_depth_bounds_test
extern PFNGLDEPTHBOUNDSEXTPROC glDepthBounds_;
// GL_ARB_color_buffer_float
extern PFNGLCLAMPCOLORARBPROC glClampColor_;
// GL_EXT_texture3D
extern PFNGLTEXIMAGE3DEXTPROC glTexImage3D_;
extern PFNGLTEXSUBIMAGE3DEXTPROC glTexSubImage3D_;
extern PFNGLCOPYTEXSUBIMAGE3DEXTPROC glCopyTexSubImage3D_;
// GL_ARB_debug_output
#ifndef GL_ARB_debug_output
#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
#define GL_DEBUG_SOURCE_API_ARB 0x8246
#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam);
typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
#endif
extern PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControl_;
extern PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsert_;
extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallback_;
extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLog_;
extern void glerror(const char *file, int line, GLenum error);
#define GLERROR do { GLenum error = glGetError(); if(error != GL_NO_ERROR) glerror(__FILE__, __LINE__, error); } while(0)
// GL_ARB_map_buffer_range
#ifndef GL_ARB_map_buffer_range
#define GL_MAP_READ_BIT 0x0001
#define GL_MAP_WRITE_BIT 0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
#endif
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange_;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange_;
#include "varray.h"
extern dynent *player;
@ -288,7 +108,7 @@ static inline bool pvsoccluded(const ivec &bborigin, int size)
}
// rendergl
extern bool hasVBO, hasDRE, hasOQ, hasTR, hasT3D, hasFBO, hasAFBO, hasDS, hasTF, hasCBF, hasBE, hasBC, hasCM, hasNP2, hasTC, hasS3TC, hasFXT1, hasMT, hasAF, hasMDA, hasGLSL, hasGM, hasNVFB, hasSGIDT, hasSGISH, hasDT, hasSH, hasNVPCF, hasPBO, hasFBB, hasUBO, hasBUE, hasMBR, hasDB, hasTG, hasT4, hasTQ, hasPF, hasTRG, hasDBT, hasDC, hasDBGO, hasGPU4, hasGPU5;
extern bool hasVBO, hasDRE, hasOQ, hasTR, hasT3D, hasFBO, hasAFBO, hasDS, hasTF, hasCBF, hasBE, hasBC, hasCM, hasNP2, hasTC, hasS3TC, hasFXT1, hasMT, hasAF, hasMDA, hasGLSL, hasGM, hasNVFB, hasSGIDT, hasSGISH, hasDT, hasSH, hasNVPCF, hasPBO, hasFBB, hasFBMS, hasTMS, hasMSS, hasUBO, hasBUE, hasMBR, hasDB, hasTG, hasT4, hasTQ, hasPF, hasTRG, hasDBT, hasDC, hasDBGO, hasGPU4, hasGPU5;
extern int hasstencil;
extern int glversion, glslversion;
@ -310,6 +130,10 @@ extern bvec fogcolor;
extern vec curfogcolor;
extern int wireframe;
extern void glerror(const char *file, int line, GLenum error);
#define GLERROR do { GLenum error = glGetError(); if(error != GL_NO_ERROR) glerror(__FILE__, __LINE__, error); } while(0)
extern void gl_checkextensions();
extern void gl_init(int w, int h, int bpp, int depth, int fsaa);
extern void cleangl();

407
src/engine/glexts.h Normal file
View File

@ -0,0 +1,407 @@
// GL_ARB_multitexture
extern PFNGLACTIVETEXTUREARBPROC glActiveTexture_;
extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTexture_;
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2f_;
extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3f_;
extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4f_;
// GL_ARB_vertex_buffer_object
extern PFNGLGENBUFFERSARBPROC glGenBuffers_;
extern PFNGLBINDBUFFERARBPROC glBindBuffer_;
extern PFNGLMAPBUFFERARBPROC glMapBuffer_;
extern PFNGLUNMAPBUFFERARBPROC glUnmapBuffer_;
extern PFNGLBUFFERDATAARBPROC glBufferData_;
extern PFNGLBUFFERSUBDATAARBPROC glBufferSubData_;
extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffers_;
extern PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubData_;
// GL_ARB_occlusion_query
extern PFNGLGENQUERIESARBPROC glGenQueries_;
extern PFNGLDELETEQUERIESARBPROC glDeleteQueries_;
extern PFNGLBEGINQUERYARBPROC glBeginQuery_;
extern PFNGLENDQUERYARBPROC glEndQuery_;
extern PFNGLGETQUERYIVARBPROC glGetQueryiv_;
extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectiv_;
extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuiv_;
// GL_EXT_timer_query
#ifndef GL_EXT_timer_query
#define GL_TIME_ELAPSED_EXT 0x88BF
typedef llong GLint64EXT;
typedef ullong GLuint64EXT;
typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);
typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);
#endif
extern PFNGLGETQUERYOBJECTI64VEXTPROC glGetQueryObjecti64v_;
extern PFNGLGETQUERYOBJECTUI64VEXTPROC glGetQueryObjectui64v_;
// GL_EXT_framebuffer_object
extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbuffer_;
extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffers_;
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenRenderbuffers_;
extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorage_;
extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatus_;
extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebuffer_;
extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffers_;
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffers_;
extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1D_;
extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2D_;
extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3D_;
extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbuffer_;
extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmap_;
// GL_ARB_draw_buffers
extern PFNGLDRAWBUFFERSARBPROC glDrawBuffers_;
// GL_EXT_framebuffer_blit
#ifndef GL_EXT_framebuffer_blit
#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
#endif
extern PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebuffer_;
// GL_EXT_framebuffer_multisample
#ifndef GL_EXT_framebuffer_multisample
#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56
#define GL_MAX_SAMPLES_EXT 0x8D57
typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
#endif
extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glRenderBufferStorageMultisample_;
// GL_ARB_texture_multisample
#ifndef GL_ARB_texture_multisample
#define GL_SAMPLE_POSITION 0x8E50
#define GL_SAMPLE_MASK 0x8E51
#define GL_SAMPLE_MASK_VALUE 0x8E52
#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59
#define GL_TEXTURE_2D_MULTISAMPLE 0x9100
#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101
#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103
#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104
#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105
#define GL_TEXTURE_SAMPLES 0x9106
#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107
#define GL_SAMPLER_2D_MULTISAMPLE 0x9108
#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B
#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C
#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D
#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E
#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F
#define GL_MAX_INTEGER_SAMPLES 0x9110
typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);
typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask);
#endif
extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample_;
extern PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample_;
extern PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv_;
extern PFNGLSAMPLEMASKIPROC glSampleMaski_;
// GL_ARB_sample_shading
#ifndef GL_ARB_sample_shading
#define GL_SAMPLE_SHADING_ARB 0x8C36
#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37
typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value);
#endif
extern PFNGLMINSAMPLESHADINGARBPROC glMinSampleShading_;
// GL_EXT_draw_range_elements
extern PFNGLDRAWRANGEELEMENTSEXTPROC glDrawRangeElements_;
// GL_EXT_blend_minmax
extern PFNGLBLENDEQUATIONEXTPROC glBlendEquation_;
// GL_EXT_blend_color
extern PFNGLBLENDCOLOREXTPROC glBlendColor_;
// GL_EXT_multi_draw_arrays
extern PFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArrays_;
extern PFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElements_;
// GL_EXT_packed_depth_stencil
#ifndef GL_DEPTH_STENCIL_EXT
#define GL_DEPTH_STENCIL_EXT 0x84F9
#endif
#ifndef GL_DEPTH24_STENCIL8_EXT
#define GL_DEPTH24_STENCIL8_EXT 0x88F0
#endif
#ifndef GL_UNSIGNED_INT_24_8_EXT
#define GL_UNSIGNED_INT_24_8_EXT 0x84FA
#endif
// GL_EXT_packed_float
#ifndef GL_R11F_G11F_B10F_EXT
#define GL_R11F_G11F_B10F_EXT 0x8C3A
#endif
// GL_ARB_texture_compression
extern PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glCompressedTexImage3D_;
extern PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2D_;
extern PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glCompressedTexImage1D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glCompressedTexSubImage3D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glCompressedTexSubImage2D_;
extern PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glCompressedTexSubImage1D_;
extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImage_;
// GL_ARB_texture_rg
#ifndef GL_ARB_texture_rg
#define GL_RG 0x8227
#define GL_R8 0x8229
#define GL_R16 0x822A
#define GL_RG8 0x822B
#define GL_RG16 0x822C
#define GL_R16F 0x822D
#define GL_R32F 0x822E
#define GL_RG16F 0x822F
#define GL_RG32F 0x8230
#endif
// GL_EXT_depth_bounds_test
extern PFNGLDEPTHBOUNDSEXTPROC glDepthBounds_;
// GL_ARB_color_buffer_float
extern PFNGLCLAMPCOLORARBPROC glClampColor_;
// GL_EXT_texture3D
extern PFNGLTEXIMAGE3DEXTPROC glTexImage3D_;
extern PFNGLTEXSUBIMAGE3DEXTPROC glTexSubImage3D_;
extern PFNGLCOPYTEXSUBIMAGE3DEXTPROC glCopyTexSubImage3D_;
// GL_ARB_debug_output
#ifndef GL_ARB_debug_output
#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243
#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244
#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245
#define GL_DEBUG_SOURCE_API_ARB 0x8246
#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247
#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248
#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249
#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A
#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B
#define GL_DEBUG_TYPE_ERROR_ARB 0x824C
#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D
#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E
#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F
#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250
#define GL_DEBUG_TYPE_OTHER_ARB 0x8251
#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143
#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144
#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145
#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146
#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147
#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148
typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam);
typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
#endif
extern PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControl_;
extern PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsert_;
extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallback_;
extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLog_;
// GL_ARB_map_buffer_range
#ifndef GL_ARB_map_buffer_range
#define GL_MAP_READ_BIT 0x0001
#define GL_MAP_WRITE_BIT 0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
#endif
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange_;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange_;
#ifndef GL_VERSION_2_1
#define GL_VERSION_2_1 1
#define GL_FLOAT_MAT2x3 0x8B65
#define GL_FLOAT_MAT2x4 0x8B66
#define GL_FLOAT_MAT3x2 0x8B67
#define GL_FLOAT_MAT3x4 0x8B68
#define GL_FLOAT_MAT4x2 0x8B69
#define GL_FLOAT_MAT4x3 0x8B6A
typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
#endif
// OpenGL 2.0: GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_fragment_shader, GL_ARB_vertex_shader
#ifdef __APPLE__
#define glCreateProgram_ glCreateProgram
#define glDeleteProgram_ glDeleteProgram
#define glUseProgram_ glUseProgram
#define glCreateShader_ glCreateShader
#define glDeleteShader_ glDeleteShader
#define glShaderSource_ glShaderSource
#define glCompileShader_ glCompileShader
#define glGetShaderiv_ glGetShaderiv
#define glGetProgramiv_ glGetProgramiv
#define glAttachShader_ glAttachShader
#define glGetProgramInfoLog_ glGetProgramInfoLog
#define glGetShaderInfoLog_ glGetShaderInfoLog
#define glLinkProgram_ glLinkProgram
#define glGetUniformLocation_ glGetUniformLocation
#define glUniform1f_ glUniform1f
#define glUniform2f_ glUniform2f
#define glUniform3f_ glUniform3f
#define glUniform4f_ glUniform4f
#define glUniform1fv_ glUniform1fv
#define glUniform2fv_ glUniform2fv
#define glUniform3fv_ glUniform3fv
#define glUniform4fv_ glUniform4fv
#define glUniform1i_ glUniform1i
#define glUniformMatrix2fv_ glUniformMatrix2fv
#define glUniformMatrix3fv_ glUniformMatrix3fv
#define glUniformMatrix4fv_ glUniformMatrix4fv
#define glBindAttribLocation_ glBindAttribLocation
#define glGetActiveUniform_ glGetActiveUniform
#define glEnableVertexAttribArray_ glEnableVertexAttribArray
#define glDisableVertexAttribArray_ glDisableVertexAttribArray
#define glVertexAttribPointer_ glVertexAttribPointer
#define glUniformMatrix2x3fv_ glUniformMatrix2x3fv
#define glUniformMatrix3x2fv_ glUniformMatrix3x2fv
#define glUniformMatrix2x4fv_ glUniformMatrix2x4fv
#define glUniformMatrix4x2fv_ glUniformMatrix4x2fv
#define glUniformMatrix3x4fv_ glUniformMatrix3x4fv
#define glUniformMatrix4x3fv_ glUniformMatrix4x3fv
#else
extern PFNGLCREATEPROGRAMPROC glCreateProgram_;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram_;
extern PFNGLUSEPROGRAMPROC glUseProgram_;
extern PFNGLCREATESHADERPROC glCreateShader_;
extern PFNGLDELETESHADERPROC glDeleteShader_;
extern PFNGLSHADERSOURCEPROC glShaderSource_;
extern PFNGLCOMPILESHADERPROC glCompileShader_;
extern PFNGLGETSHADERIVPROC glGetShaderiv_;
extern PFNGLGETPROGRAMIVPROC glGetProgramiv_;
extern PFNGLATTACHSHADERPROC glAttachShader_;
extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_;
extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_;
extern PFNGLLINKPROGRAMPROC glLinkProgram_;
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_;
extern PFNGLUNIFORM1FPROC glUniform1f_;
extern PFNGLUNIFORM2FPROC glUniform2f_;
extern PFNGLUNIFORM3FPROC glUniform3f_;
extern PFNGLUNIFORM4FPROC glUniform4f_;
extern PFNGLUNIFORM1FVPROC glUniform1fv_;
extern PFNGLUNIFORM2FVPROC glUniform2fv_;
extern PFNGLUNIFORM3FVPROC glUniform3fv_;
extern PFNGLUNIFORM4FVPROC glUniform4fv_;
extern PFNGLUNIFORM1IPROC glUniform1i_;
extern PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_;
extern PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_;
extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_;
extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_;
extern PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_;
extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray_;
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray_;
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer_;
extern PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv_;
extern PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv_;
extern PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv_;
extern PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv_;
extern PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv_;
extern PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv_;
#endif
#ifndef GL_ARB_uniform_buffer_object
#define GL_ARB_uniform_buffer_object 1
#define GL_UNIFORM_BUFFER 0x8A11
#define GL_UNIFORM_BUFFER_BINDING 0x8A28
#define GL_UNIFORM_BUFFER_START 0x8A29
#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
#define GL_UNIFORM_TYPE 0x8A37
#define GL_UNIFORM_SIZE 0x8A38
#define GL_UNIFORM_NAME_LENGTH 0x8A39
#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
#define GL_UNIFORM_OFFSET 0x8A3B
#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
#define GL_INVALID_INDEX 0xFFFFFFFFu
typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices);
typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
#endif
#ifndef GL_INVALID_INDEX
#define GL_INVALID_INDEX 0xFFFFFFFFu
#endif
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
#elif GL_GLEXT_VERSION < 43
typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
#endif
// GL_ARB_uniform_buffer_object
extern PFNGLGETUNIFORMINDICESPROC glGetUniformIndices_;
extern PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv_;
extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex_;
extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv_;
extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding_;
extern PFNGLBINDBUFFERBASEPROC glBindBufferBase_;
extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange_;
#ifndef GL_EXT_bindable_uniform
#define GL_EXT_bindable_uniform 1
#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
#endif
// GL_EXT_bindable_uniform
extern PFNGLUNIFORMBUFFEREXTPROC glUniformBuffer_;
extern PFNGLGETUNIFORMBUFFERSIZEEXTPROC glGetUniformBufferSize_;
extern PFNGLGETUNIFORMOFFSETEXTPROC glGetUniformOffset_;

View File

@ -2,7 +2,7 @@
#include "engine.h"
bool hasVBO = false, hasDRE = false, hasOQ = false, hasTR = false, hasT3D = false, hasFBO = false, hasAFBO = false, hasDS = false, hasTF = false, hasCBF = false, hasBE = false, hasBC = false, hasCM = false, hasNP2 = false, hasTC = false, hasS3TC = false, hasFXT1 = false, hasMT = false, hasAF = false, hasMDA = false, hasGLSL = false, hasGM = false, hasNVFB = false, hasSGIDT = false, hasSGISH = false, hasDT = false, hasSH = false, hasNVPCF = false, hasPBO = false, hasFBB = false, hasUBO = false, hasBUE = false, hasMBR = false, hasDB = false, hasTG = false, hasT4 = false, hasTQ = false, hasPF = false, hasTRG = false, hasDBT = false, hasDC = false, hasDBGO = false, hasGPU4 = false, hasGPU5 = false;
bool hasVBO = false, hasDRE = false, hasOQ = false, hasTR = false, hasT3D = false, hasFBO = false, hasAFBO = false, hasDS = false, hasTF = false, hasCBF = false, hasBE = false, hasBC = false, hasCM = false, hasNP2 = false, hasTC = false, hasS3TC = false, hasFXT1 = false, hasMT = false, hasAF = false, hasMDA = false, hasGLSL = false, hasGM = false, hasNVFB = false, hasSGIDT = false, hasSGISH = false, hasDT = false, hasSH = false, hasNVPCF = false, hasPBO = false, hasFBB = false, hasFBMS = false, hasTMS = false, hasMSS = false, hasUBO = false, hasBUE = false, hasMBR = false, hasDB = false, hasTG = false, hasT4 = false, hasTQ = false, hasPF = false, hasTRG = false, hasDBT = false, hasDC = false, hasDBGO = false, hasGPU4 = false, hasGPU5 = false;
bool mesa = false, intel = false, ati = false, nvidia = false;
int hasstencil = 0;
@ -62,6 +62,18 @@ PFNGLDRAWBUFFERSARBPROC glDrawBuffers_ = NULL;
// GL_EXT_framebuffer_blit
PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebuffer_ = NULL;
// GL_EXT_framebuffer_multisample
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glRenderBufferStorageMultisample_ = NULL;
// GL_ARB_texture_multisample
PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample_ = NULL;
PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample_ = NULL;
PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv_ = NULL;
PFNGLSAMPLEMASKIPROC glSampleMaski_ = NULL;
// GL_ARB_sample_shading
PFNGLMINSAMPLESHADINGARBPROC glMinSampleShading_ = NULL;
// OpenGL 2.0: GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_fragment_shader, GL_ARB_vertex_shader
#ifndef __APPLE__
PFNGLCREATEPROGRAMPROC glCreateProgram_ = NULL;
@ -366,6 +378,27 @@ void gl_checkextensions()
hasFBB = true;
if(dbgexts) conoutf(CON_INIT, "Using GL_EXT_framebuffer_blit extension.");
}
if(hasext(exts, "GL_EXT_framebuffer_multisample"))
{
glRenderBufferStorageMultisample_ = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)getprocaddress("glRenderBufferStorageMultisampleEXT");
hasFBMS = true;
if(dbgexts) conoutf(CON_INIT, "Using GL_EXT_framebuffer_multisample extension.");
}
if(hasext(exts, "GL_ARB_texture_multisample"))
{
glTexImage2DMultisample_ = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)getprocaddress("glTexImage2DMultisample");
glTexImage3DMultisample_ = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)getprocaddress("glTexImage3DMultisample");
glGetMultisamplefv_ = (PFNGLGETMULTISAMPLEFVPROC) getprocaddress("glGetMultisamplefv");
glSampleMaski_ = (PFNGLSAMPLEMASKIPROC) getprocaddress("glSampleMaski");
hasTMS = true;
if(dbgexts) conoutf(CON_INIT, "Using GL_ARB_texture_multisample extension.");
}
if(hasext(exts, "GL_ARB_sample_shading"))
{
glMinSampleShading_ = (PFNGLMINSAMPLESHADINGARBPROC)getprocaddress("glMinSampleShadingARB");
hasMSS = true;
if(dbgexts) conoutf(CON_INIT, "Using GL_ARB_sample_shading extension.");
}
}
//else conoutf(CON_WARN, "WARNING: No framebuffer object support. (reflective water may be slow)");
else fatal("Framebuffer object support is required!");

View File

@ -10,7 +10,7 @@ GLuint refractfbo = 0, refracttex = 0;
GLenum bloomformat = 0, hdrformat = 0;
bool hdrfloat = false;
int aow = -1, aoh = -1;
GLuint aofbo[3] = { 0, 0, 0 }, aotex[3] = { 0, 0, 0 }, aonoisetex = 0;
GLuint aofbo[4] = { 0, 0, 0, 0 }, aotex[4] = { 0, 0, 0, 0 }, aonoisetex = 0;
glmatrixf eyematrix, worldmatrix, linearworldmatrix, screenmatrix;
extern int bloomsize, bloomprec;
@ -68,7 +68,7 @@ void cleanupbloom()
lasthdraccum = 0;
}
extern int ao, aotaps, aoreduce, aoreducedepth, aonoise, aobilateral, aopackdepth, aodepthformat;
extern int ao, aotaps, aoreduce, aoreducedepth, aonoise, aobilateral, aobilateralupscale, aopackdepth, aodepthformat;
static Shader *bilateralshader[2] = { NULL, NULL };
@ -79,13 +79,11 @@ Shader *loadbilateralshader(int pass)
string opts;
int optslen = 0;
bool linear = aoreducedepth && (aoreduce || aoreducedepth > 1), upscale = aoreduce && aobilateralupscale;
if(aoreduce) opts[optslen++] = 'r';
bool linear = aopackdepth || (aoreducedepth && (aoreduce || aoreducedepth > 1));
if(linear)
{
opts[optslen++] = 'l';
if(aopackdepth) opts[optslen++] = 'p';
}
if(upscale) opts[optslen++] = 'u';
else if(linear) opts[optslen++] = 'l';
if(aopackdepth) opts[optslen++] = 'p';
opts[optslen] = '\0';
defformatstring(name)("bilateral%c%s%d", 'x' + pass, opts, aobilateral);
@ -102,12 +100,12 @@ void clearbilateralshaders()
loopk(2) bilateralshader[k] = NULL;
}
void setbilateralshader(int radius, int pass, float sigma, float depth, bool linear, bool packed)
void setbilateralshader(int radius, int pass, float sigma, float depth, bool linear)
{
float stepx = linear ? 1 : float(vieww)/aow, stepy = linear ? 1 : float(viewh)/aoh;
bilateralshader[pass]->set();
sigma *= 2*radius;
LOCALPARAM(bilateralparams, (1.0f/(2*sigma*sigma), 1.0f/(depth*depth), pass==0 ? stepx : 0, pass==1 ? stepy : 0));
float step = linear ? 1 : (pass ? float(vieww)/aoh : float(viewh)/aow);
LOCALPARAM(bilateralparams, (1.0f/(2*sigma*sigma), 1.0f/(depth*depth), step));
}
static Shader *ambientobscuranceshader = NULL;
@ -121,7 +119,6 @@ Shader *loadambientobscuranceshader()
bool linear = aoreducedepth && (aoreduce || aoreducedepth > 1);
if(linear) opts[optslen++] = 'l';
if(aobilateral && aopackdepth) opts[optslen++] = 'p';
opts[optslen] = '\0';
defformatstring(name)("ambientobscurance%s%d", opts, aotaps);
@ -140,13 +137,12 @@ void clearaoshaders()
void setupao(int w, int h)
{
w >>= aoreduce;
h >>= aoreduce;
int sw = w>>aoreduce, sh = h>>aoreduce;
if(w == aow && h == aoh) return;
if(sw == aow && sh == aoh) return;
aow = w;
aoh = h;
aow = sw;
aoh = sh;
if(!aonoisetex) glGenTextures(1, &aonoisetex);
bvec *noise = new bvec[(1<<aonoise)*(1<<aonoise)];
@ -154,11 +150,13 @@ void setupao(int w, int h)
createtexture(aonoisetex, 1<<aonoise, 1<<aonoise, noise, 0, 0, GL_RGB, GL_TEXTURE_2D);
delete[] noise;
loopi(2)
bool upscale = aoreduce && aobilateral && aobilateralupscale;
GLenum format = aobilateral && aopackdepth && aodepthformat ? GL_RG16F : GL_RGBA8;
loopi(upscale ? 3 : 2)
{
if(!aotex[i]) glGenTextures(1, &aotex[i]);
if(!aofbo[i]) glGenFramebuffers_(1, &aofbo[i]);
createtexture(aotex[i], w, h, NULL, 3, 1, aobilateral && aopackdepth && aodepthformat ? GL_RG16F : GL_RGBA8 , GL_TEXTURE_RECTANGLE_ARB);
createtexture(aotex[i], upscale && i ? w : aow, upscale && i >= 2 ? h : aoh, NULL, 3, upscale && aopackdepth && i < 2 && format == GL_RGBA8 ? 0 : 1, i >= 2 ? GL_RGBA8 : format, GL_TEXTURE_RECTANGLE_ARB);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[i]);
glFramebufferTexture2D_(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, aotex[i], 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT)
@ -167,11 +165,11 @@ void setupao(int w, int h)
if(aoreducedepth && (aoreduce || aoreducedepth > 1))
{
if(!aotex[2]) glGenTextures(1, &aotex[2]);
if(!aofbo[2]) glGenFramebuffers_(1, &aofbo[2]);
createtexture(aotex[2], w, h, NULL, 3, 0, aodepthformat ? GL_R16F : GL_RGBA8, GL_TEXTURE_RECTANGLE_ARB);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[2]);
glFramebufferTexture2D_(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, aotex[2], 0);
if(!aotex[3]) glGenTextures(1, &aotex[3]);
if(!aofbo[3]) glGenFramebuffers_(1, &aofbo[3]);
createtexture(aotex[3], aow, aoh, NULL, 3, 0, aodepthformat ? GL_R16F : GL_RGBA8, GL_TEXTURE_RECTANGLE_ARB);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[3]);
glFramebufferTexture2D_(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, aotex[3], 0);
if(glCheckFramebufferStatus_(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT)
fatal("failed allocating AO buffer!");
}
@ -184,8 +182,8 @@ void setupao(int w, int h)
void cleanupao()
{
loopi(3) if(aofbo[i]) { glDeleteFramebuffers_(1, &aofbo[i]); aofbo[i] = 0; }
loopi(3) if(aotex[i]) { glDeleteTextures(1, &aotex[i]); aotex[i] = 0; }
loopi(4) if(aofbo[i]) { glDeleteFramebuffers_(1, &aofbo[i]); aofbo[i] = 0; }
loopi(4) if(aotex[i]) { glDeleteTextures(1, &aotex[i]); aotex[i] = 0; }
if(aonoisetex) { glDeleteTextures(1, &aonoisetex); aonoisetex = 0; }
aow = bloomh = -1;
@ -213,6 +211,7 @@ VARF(aonoise, 0, 5, 8, cleanupao());
VARFP(aobilateral, 0, 3, 10, cleanupao());
FVARP(aobilateralsigma, 0, 0.5f, 1e3f);
FVARP(aobilateraldepth, 0, 4, 1e3f);
VARFP(aobilateralupscale, 0, 0, 1, cleanupao());
VARF(aopackdepth, 0, 1, 1, cleanupao());
VARFP(aotaps, 1, 5, 12, cleanupao());
VAR(debugao, 0, 0, 1);
@ -228,12 +227,13 @@ void viewao()
int w = min(screen->w, screen->h)/2, h = (w*screen->h)/screen->w;
rectshader->set();
glColor3f(1, 1, 1);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[0]);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[2] ? aotex[2] : aotex[0]);
int tw = aotex[2] ? gw : aow, th = aotex[2] ? gh : aoh;
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0, aoh); glVertex2i(0, 0);
glTexCoord2f(aow, aoh); glVertex2i(w, 0);
glTexCoord2f(0, th); glVertex2i(0, 0);
glTexCoord2f(tw, th); glVertex2i(w, 0);
glTexCoord2f(0, 0); glVertex2i(0, h);
glTexCoord2f(aow, 0); glVertex2i(w, h);
glTexCoord2f(tw, 0); glVertex2i(w, h);
glEnd();
notextureshader->set();
}
@ -250,7 +250,7 @@ void renderao()
float xscale = eyematrix.v[0], yscale = eyematrix.v[5];
if(linear)
{
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[2]);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[3]);
glViewport(0, 0, aow, aoh);
SETSHADER(linearizedepth);
screenquad(vieww, viewh);
@ -258,7 +258,7 @@ void renderao()
xscale *= float(vieww)/aow;
yscale *= float(viewh)/aoh;
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[2]);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[3]);
}
ambientobscuranceshader->set();
@ -279,17 +279,31 @@ void renderao()
if(aobilateral)
{
if(!linear && aopackdepth) linear = true;
loopi(2 + 2*aoiter)
if(aoreduce && aobilateralupscale) loopi(2)
{
setbilateralshader(aobilateral, i%2, aobilateralsigma, aobilateraldepth, linear, linear && aopackdepth);
setbilateralshader(aobilateral, i, aobilateralsigma, aobilateraldepth, false);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[i+1]);
glViewport(0, 0, vieww, i ? viewh : aoh);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[i]);
glActiveTexture_(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, linear ? aotex[3] : gdepthtex);
glActiveTexture_(GL_TEXTURE2_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, gdepthtex);
glActiveTexture_(GL_TEXTURE0_ARB);
screenquad(vieww, viewh, i ? vieww : aow, aoh);
}
else loopi(2 + 2*aoiter)
{
setbilateralshader(aobilateral, i%2, aobilateralsigma, aobilateraldepth, linear);
glBindFramebuffer_(GL_FRAMEBUFFER_EXT, aofbo[(i+1)%2]);
glViewport(0, 0, aow, aoh);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[i%2]);
if(!linear || !aopackdepth)
if(!aopackdepth)
{
glActiveTexture_(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, linear ? aotex[2] : gdepthtex);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, linear ? aotex[3] : gdepthtex);
glActiveTexture_(GL_TEXTURE2_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, gdepthtex);
glActiveTexture_(GL_TEXTURE0_ARB);
}
screenquad(vieww, viewh);
@ -1885,7 +1899,7 @@ void renderlights(float bsx1 = -1, float bsy1 = -1, float bsx2 = 1, float bsy2 =
if(ao)
{
glActiveTexture_(GL_TEXTURE5_ARB);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[0]);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, aotex[2] ? aotex[2] : aotex[0]);
}
if(sunlight && csmshadowmap && gi && giscale && gidist) loopi(3)
{
@ -1909,7 +1923,7 @@ void renderlights(float bsx1 = -1, float bsy1 = -1, float bsx2 = 1, float bsy2 =
}
else
{
GLOBALPARAM(aoscale, (float(aow)/vieww, float(aoh)/viewh));
GLOBALPARAM(aoscale, (aotex[2] ? vec2(1, 1) : vec2(float(aow)/vieww, float(aoh)/viewh)));
GLOBALPARAM(aoparams, (aomin, 1.0f-aomin, aosunmin, 1.0f-aosunmin));
}
}

View File

@ -1,184 +1,3 @@
#ifndef GL_VERSION_2_1
#define GL_VERSION_2_1 1
#define GL_FLOAT_MAT2x3 0x8B65
#define GL_FLOAT_MAT2x4 0x8B66
#define GL_FLOAT_MAT3x2 0x8B67
#define GL_FLOAT_MAT3x4 0x8B68
#define GL_FLOAT_MAT4x2 0x8B69
#define GL_FLOAT_MAT4x3 0x8B6A
typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
#endif
// OpenGL 2.0: GL_ARB_shading_language_100, GL_ARB_shader_objects, GL_ARB_fragment_shader, GL_ARB_vertex_shader
#ifdef __APPLE__
#define glCreateProgram_ glCreateProgram
#define glDeleteProgram_ glDeleteProgram
#define glUseProgram_ glUseProgram
#define glCreateShader_ glCreateShader
#define glDeleteShader_ glDeleteShader
#define glShaderSource_ glShaderSource
#define glCompileShader_ glCompileShader
#define glGetShaderiv_ glGetShaderiv
#define glGetProgramiv_ glGetProgramiv
#define glAttachShader_ glAttachShader
#define glGetProgramInfoLog_ glGetProgramInfoLog
#define glGetShaderInfoLog_ glGetShaderInfoLog
#define glLinkProgram_ glLinkProgram
#define glGetUniformLocation_ glGetUniformLocation
#define glUniform1f_ glUniform1f
#define glUniform2f_ glUniform2f
#define glUniform3f_ glUniform3f
#define glUniform4f_ glUniform4f
#define glUniform1fv_ glUniform1fv
#define glUniform2fv_ glUniform2fv
#define glUniform3fv_ glUniform3fv
#define glUniform4fv_ glUniform4fv
#define glUniform1i_ glUniform1i
#define glUniformMatrix2fv_ glUniformMatrix2fv
#define glUniformMatrix3fv_ glUniformMatrix3fv
#define glUniformMatrix4fv_ glUniformMatrix4fv
#define glBindAttribLocation_ glBindAttribLocation
#define glGetActiveUniform_ glGetActiveUniform
#define glEnableVertexAttribArray_ glEnableVertexAttribArray
#define glDisableVertexAttribArray_ glDisableVertexAttribArray
#define glVertexAttribPointer_ glVertexAttribPointer
#define glUniformMatrix2x3fv_ glUniformMatrix2x3fv
#define glUniformMatrix3x2fv_ glUniformMatrix3x2fv
#define glUniformMatrix2x4fv_ glUniformMatrix2x4fv
#define glUniformMatrix4x2fv_ glUniformMatrix4x2fv
#define glUniformMatrix3x4fv_ glUniformMatrix3x4fv
#define glUniformMatrix4x3fv_ glUniformMatrix4x3fv
#else
extern PFNGLCREATEPROGRAMPROC glCreateProgram_;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram_;
extern PFNGLUSEPROGRAMPROC glUseProgram_;
extern PFNGLCREATESHADERPROC glCreateShader_;
extern PFNGLDELETESHADERPROC glDeleteShader_;
extern PFNGLSHADERSOURCEPROC glShaderSource_;
extern PFNGLCOMPILESHADERPROC glCompileShader_;
extern PFNGLGETSHADERIVPROC glGetShaderiv_;
extern PFNGLGETPROGRAMIVPROC glGetProgramiv_;
extern PFNGLATTACHSHADERPROC glAttachShader_;
extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog_;
extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog_;
extern PFNGLLINKPROGRAMPROC glLinkProgram_;
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation_;
extern PFNGLUNIFORM1FPROC glUniform1f_;
extern PFNGLUNIFORM2FPROC glUniform2f_;
extern PFNGLUNIFORM3FPROC glUniform3f_;
extern PFNGLUNIFORM4FPROC glUniform4f_;
extern PFNGLUNIFORM1FVPROC glUniform1fv_;
extern PFNGLUNIFORM2FVPROC glUniform2fv_;
extern PFNGLUNIFORM3FVPROC glUniform3fv_;
extern PFNGLUNIFORM4FVPROC glUniform4fv_;
extern PFNGLUNIFORM1IPROC glUniform1i_;
extern PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv_;
extern PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv_;
extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv_;
extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation_;
extern PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform_;
extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray_;
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray_;
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer_;
extern PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv_;
extern PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv_;
extern PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv_;
extern PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv_;
extern PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv_;
extern PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv_;
#endif
#ifndef GL_ARB_uniform_buffer_object
#define GL_ARB_uniform_buffer_object 1
#define GL_UNIFORM_BUFFER 0x8A11
#define GL_UNIFORM_BUFFER_BINDING 0x8A28
#define GL_UNIFORM_BUFFER_START 0x8A29
#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C
#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32
#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
#define GL_UNIFORM_TYPE 0x8A37
#define GL_UNIFORM_SIZE 0x8A38
#define GL_UNIFORM_NAME_LENGTH 0x8A39
#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
#define GL_UNIFORM_OFFSET 0x8A3B
#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45
#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
#define GL_INVALID_INDEX 0xFFFFFFFFu
typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices);
typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);
typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
#endif
#ifndef GL_INVALID_INDEX
#define GL_INVALID_INDEX 0xFFFFFFFFu
#endif
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
#elif GL_GLEXT_VERSION < 43
typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);
#endif
// GL_ARB_uniform_buffer_object
extern PFNGLGETUNIFORMINDICESPROC glGetUniformIndices_;
extern PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv_;
extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex_;
extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv_;
extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding_;
extern PFNGLBINDBUFFERBASEPROC glBindBufferBase_;
extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange_;
#ifndef GL_EXT_bindable_uniform
#define GL_EXT_bindable_uniform 1
#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2
#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3
#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4
#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED
#define GL_UNIFORM_BUFFER_EXT 0x8DEE
#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF
typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);
typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);
typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);
#endif
// GL_EXT_bindable_uniform
extern PFNGLUNIFORMBUFFEREXTPROC glUniformBuffer_;
extern PFNGLGETUNIFORMBUFFERSIZEEXTPROC glGetUniformBufferSize_;
extern PFNGLGETUNIFORMOFFSETEXTPROC glGetUniformOffset_;
extern int renderpath;
enum { R_GLSLANG = 0 };

View File

@ -114,6 +114,7 @@
<Option weight="0" />
</Unit>
<Unit filename="..\engine\explosion.h" />
<Unit filename="..\engine\glexts.h" />
<Unit filename="..\engine\grass.cpp" />
<Unit filename="..\engine\hitzone.h" />
<Unit filename="..\engine\iqm.h" />

View File

@ -410,6 +410,7 @@
<ClInclude Include="..\engine\animmodel.h" />
<ClInclude Include="..\engine\bih.h" />
<ClInclude Include="..\engine\explosion.h" />
<ClInclude Include="..\engine\glexts.h" />
<ClInclude Include="..\engine\hitzone.h" />
<ClInclude Include="..\engine\iqm.h" />
<ClInclude Include="..\engine\lensflare.h" />

View File

@ -130,6 +130,7 @@
B9AC7A880D06DB44005506F8 /* command.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = command.cpp; sourceTree = "<group>"; };
B9AC7A890D06DB44005506F8 /* console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = console.cpp; sourceTree = "<group>"; };
B9AC7A8B0D06DB44005506F8 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = "<group>"; };
B9AC7A8B0D06DB44005506F8 /* glexts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = "<group>"; };
B9AC7A8C0D06DB44005506F8 /* grass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = grass.cpp; sourceTree = "<group>"; };
B9AC7A8D0D06DB44005506F8 /* light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = light.cpp; sourceTree = "<group>"; };
B9AC7A8E0D06DB44005506F8 /* light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = light.h; sourceTree = "<group>"; };
@ -380,6 +381,7 @@
B9AC7A860D06DB44005506F8 /* bih.h */,
B9AC7A8B0D06DB44005506F8 /* engine.h */,
D18B8FBE0DB0AF8200171439 /* explosion.h */,
B9AC7A8B0D06DB44005506F8 /* glexts.h */,
D19E775D11977E82003753EF /* iqm.h */,
D18B8FBF0DB0AF8200171439 /* lensflare.h */,
D18B8FC00DB0AF8200171439 /* lightning.h */,