projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
routes
[carveJwlIkooP6JGAAIwe30JlM.git]
/
gate.h
diff --git
a/gate.h
b/gate.h
index 6e9b95f9b8d27fcebe255fe496d1a52b78cda74b..a370d81dde091a61c7c0f34235a158af48df33ef 100644
(file)
--- a/
gate.h
+++ b/
gate.h
@@
-13,16
+13,20
@@
typedef struct teleport_gate teleport_gate;
static struct
{
static struct
{
-
GLuint fb, rgb, r
b;
+
struct framebuffer f
b;
glmesh mdl;
int high_qual; /* If in high performance mode, we don't use RT's, and
glmesh mdl;
int high_qual; /* If in high performance mode, we don't use RT's, and
-
instead use stencil buffers.
-
There is therefore no heat warp effect. */
+ instead use stencil buffers.
+ There is therefore no heat warp effect. */
}
grender =
{
}
grender =
{
- .high_qual = 0
+ .high_qual = 0,
+ .fb = {
+ .format = GL_RGB,
+ .div = 1
+ }
};
struct teleport_gate
};
struct teleport_gate
@@
-56,16
+60,16
@@
static void gate_register(void)
static void gate_init(void)
{
static void gate_init(void)
{
-
create_renderbuffer_std( &grender.fb, &grender.rgb, &grender.r
b );
+
fb_init( &grender.f
b );
- m
odel *mgate = vg_asset_re
ad( "models/rs_gate.mdl" );
- m
odel_unpack
( mgate, &grender.mdl );
+ m
dl_header *mgate = mdl_lo
ad( "models/rs_gate.mdl" );
+ m
dl_unpack_glmesh
( mgate, &grender.mdl );
free( mgate );
}
static void gate_fb_resize(void)
{
free( mgate );
}
static void gate_fb_resize(void)
{
-
resize_renderbuffer_std( &grender.fb, &grender.rgb, &grender.r
b );
+
fb_resize( &grender.f
b );
}
static void render_gate( teleport_gate *gate, m4x3f camera )
}
static void render_gate( teleport_gate *gate, m4x3f camera )
@@
-129,7
+133,7
@@
static void render_gate( teleport_gate *gate, m4x3f camera )
if( grender.high_qual )
{
if( grender.high_qual )
{
-
glBindFramebuffer( GL_FRAMEBUFFER,
grender.fb );
+
fb_use( &
grender.fb );
glClearColor( 0.11f, 0.35f, 0.37f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
}
glClearColor( 0.11f, 0.35f, 0.37f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
}
@@
-158,7
+162,7
@@
static void render_gate( teleport_gate *gate, m4x3f camera )
}
render_world( projection, cam_new );
}
render_world( projection, cam_new );
-
+
if( grender.high_qual )
{
/*
if( grender.high_qual )
{
/*
@@
-167,17
+171,18
@@
static void render_gate( teleport_gate *gate, m4x3f camera )
*/
render_water_texture( cam_new );
*/
render_water_texture( cam_new );
- glBindFramebuffer( GL_FRAMEBUFFER, grender.fb );
- render_water_surface( projection );
- glBindFramebuffer( GL_FRAMEBUFFER, 0 );
+ fb_use( &grender.fb );
+
+ render_water_surface( projection, cam_new );
+ fb_use( NULL );
shader_gate_use();
shader_gate_uPv( vg_pv );
shader_gate_uMdl( gate_xform );
shader_gate_use();
shader_gate_uPv( vg_pv );
shader_gate_uMdl( gate_xform );
-
glActiveTexture( GL_TEXTURE
0 );
- glBindTexture( GL_TEXTURE_2D, grender.rgb );
+
fb_bindtex( &grender.fb,
0 );
+
shader_gate_uCam( viewpos );
shader_gate_uTexMain( 0 );
shader_gate_uTexWater( 1 );
shader_gate_uCam( viewpos );
shader_gate_uTexMain( 0 );
shader_gate_uTexWater( 1 );
@@
-197,6
+202,14
@@
static void render_gate( teleport_gate *gate, m4x3f camera )
}
else
{
}
else
{
+ glDisable( GL_STENCIL_TEST );
+
+ render_water_texture( cam_new );
+ fb_use( NULL );
+ glEnable( GL_STENCIL_TEST );
+
+ render_water_surface( projection, cam_new );
+
glStencilMask( 0xFF );
glStencilFunc( GL_ALWAYS, 1, 0xFF );
glDisable( GL_STENCIL_TEST );
glStencilMask( 0xFF );
glStencilFunc( GL_ALWAYS, 1, 0xFF );
glDisable( GL_STENCIL_TEST );