* Merged in my latest changes into SVN repository.
* Arranged to avoid reading/writing textures at same time. * Removed depth and stencil buffers from FBO's. * Eliminated 1-component FBO that caused grief for FBO completeness test. * Added back missing cubeShaderNoTexture.vert
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
(Add new stuff at the top!)
|
||||
|
||||
* Merged in my latest changes into SVN repository.
|
||||
* Arranged to avoid reading/writing textures at same time.
|
||||
* Removed depth and stencil buffers from FBO's.
|
||||
* Eliminated 1-component FBO that caused grief for FBO completeness test.
|
||||
* Added back missing cubeShaderNoTexture.vert
|
||||
|
||||
------------------- FIRST ADDITION TO SUBVERSION ---------------------
|
||||
GPUphysics-0.4
|
||||
|
||||
@@ -99,3 +99,15 @@
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
#ifdef DISABLE_GL_ERROR_CHECKS
|
||||
inline void showGLerror ( const char * ) {}
|
||||
#else
|
||||
inline void showGLerror ( const char *msg )
|
||||
{
|
||||
GLenum err ;
|
||||
|
||||
while ( (err = glGetError()) != GL_NO_ERROR )
|
||||
fprintf ( stderr, "%s: OpenGL Error - %s\n", msg, gluErrorString ( err ) ) ;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ static FrameBufferObject *rotation ;
|
||||
static FrameBufferObject *velocity ;
|
||||
static FrameBufferObject *rotvelocity ;
|
||||
static FrameBufferObject *force ;
|
||||
static FrameBufferObject *mass ;
|
||||
static FrameBufferObject *massXX ;
|
||||
static FrameBufferObject *old ;
|
||||
|
||||
#define TEX_SIZE 128
|
||||
@@ -139,7 +139,7 @@ void initMotionTextures ()
|
||||
velocity = NULL ;
|
||||
rotvelocity = NULL ;
|
||||
force = NULL ;
|
||||
mass = NULL ;
|
||||
massXX = NULL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -149,12 +149,12 @@ void initMotionTextures ()
|
||||
if ( debugOpt == DRAW_WITHOUT_FORCES )
|
||||
{
|
||||
force = NULL ;
|
||||
mass = NULL ;
|
||||
massXX = NULL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
force = new FrameBufferObject ( TEX_SIZE, TEX_SIZE, 3, FBO_FLOAT ) ;
|
||||
mass = new FrameBufferObject ( TEX_SIZE, TEX_SIZE, 1, FBO_FLOAT ) ;
|
||||
massXX = new FrameBufferObject ( TEX_SIZE, TEX_SIZE, 3, FBO_FLOAT ) ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,14 +164,14 @@ void initMotionTextures ()
|
||||
float *velocityData ;
|
||||
float *rotvelocityData ;
|
||||
float *forceData ;
|
||||
float *massData ;
|
||||
float *massXXData ;
|
||||
|
||||
if ( debugOpt == DRAW_WITHOUT_PHYSICS )
|
||||
{
|
||||
velocityData = NULL ;
|
||||
rotvelocityData = NULL ;
|
||||
forceData = NULL ;
|
||||
massData = NULL ;
|
||||
massXXData = NULL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -181,12 +181,12 @@ void initMotionTextures ()
|
||||
if ( debugOpt == DRAW_WITHOUT_FORCES )
|
||||
{
|
||||
forceData = NULL ;
|
||||
massData = NULL ;
|
||||
massXXData= NULL ;
|
||||
}
|
||||
else
|
||||
{
|
||||
forceData = new float [ TEX_SIZE * TEX_SIZE * 3 ] ;
|
||||
massData = new float [ TEX_SIZE * TEX_SIZE ] ;
|
||||
massXXData = new float [ TEX_SIZE * TEX_SIZE * 3 ] ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,7 +229,9 @@ void initMotionTextures ()
|
||||
forceData [ (i*TEX_SIZE + j) * 3 + 2 ] = 0.0f ;
|
||||
|
||||
/* One kg in weight each */
|
||||
massData [ i*TEX_SIZE + j ] = 1.0f ;
|
||||
massXXData [ (i*TEX_SIZE + j) * 3 + 0 ] = 1.0f ;
|
||||
massXXData [ (i*TEX_SIZE + j) * 3 + 1 ] = 0.0f ; /* Unused */
|
||||
massXXData [ (i*TEX_SIZE + j) * 3 + 2 ] = 0.0f ; /* Unused */
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -248,7 +250,7 @@ void initMotionTextures ()
|
||||
if ( debugOpt != DRAW_WITHOUT_FORCES )
|
||||
{
|
||||
force -> fillTexture ( forceData ) ;
|
||||
mass -> fillTexture ( massData ) ;
|
||||
massXX -> fillTexture ( massXXData ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -278,13 +280,13 @@ void initPhysicsShaders ()
|
||||
"uniform vec4 g_dt ;"
|
||||
"uniform sampler2D old_velocity ;"
|
||||
"uniform sampler2D force ;"
|
||||
"uniform sampler2D mass ;"
|
||||
"uniform sampler2D massXX ;"
|
||||
"void main() {"
|
||||
" gl_FragColor = vec4 ("
|
||||
" texture2D ( old_velocity, gl_TexCoord[0].st ).xyz +"
|
||||
" g_dt.w * ( g_dt.xyz +"
|
||||
" texture2D ( force , gl_TexCoord[0].st ).xyz /"
|
||||
" texture2D ( mass , gl_TexCoord[0].st ).x),"
|
||||
" texture2D ( massXX , gl_TexCoord[0].st ).x),"
|
||||
" 1.0 ) ; }",
|
||||
"VelocityGenerator Frag Shader" ) ;
|
||||
assert ( velocityGenerator -> compiledOK () ) ;
|
||||
@@ -578,7 +580,7 @@ void display ( void )
|
||||
velocityGenerator -> use () ;
|
||||
velocityGenerator -> applyTexture ( "old_velocity", old , 0 ) ;
|
||||
velocityGenerator -> applyTexture ( "force" , force , 1 ) ;
|
||||
velocityGenerator -> applyTexture ( "mass" , mass , 2 ) ;
|
||||
velocityGenerator -> applyTexture ( "massXX" , massXX , 2 ) ;
|
||||
velocityGenerator -> setUniform4f ( "g_dt", 0.0f, -9.8f, 0.0f, 0.016f ) ;
|
||||
velocity -> paint () ;
|
||||
}
|
||||
|
||||
12
Extras/GPUphysics/cubeShaderNoTexture.vert
Normal file
12
Extras/GPUphysics/cubeShaderNoTexture.vert
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
/*
|
||||
Use this for rendering the little cubes when
|
||||
there is no vertex shader texture support.
|
||||
*/
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_FrontColor = gl_Color ;
|
||||
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex ;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,33 @@ static void checkFrameBufferStatus ()
|
||||
exit ( 1 ) ;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO setup.\n" ) ;
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO attachment.\n" ) ;
|
||||
break ;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO - missing attachment.\n" ) ;
|
||||
break ;
|
||||
|
||||
#ifdef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT:
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO - duplicate attachment.\n" ) ;
|
||||
break ;
|
||||
#endif
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO - improper dimensions.\n" ) ;
|
||||
break ;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO - improper formats.\n" ) ;
|
||||
break ;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO draw buffer.\n" ) ;
|
||||
break ;
|
||||
|
||||
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT :
|
||||
fprintf ( stderr, "WARNING: Incomplete FBO read buffer.\n" ) ;
|
||||
break ;
|
||||
|
||||
default :
|
||||
@@ -145,38 +171,61 @@ FrameBufferObject::FrameBufferObject ( int _width ,
|
||||
}
|
||||
|
||||
glGenTextures ( 1, & textureHandle ) ;
|
||||
|
||||
glBindTexture ( GL_TEXTURE_2D, textureHandle ) ;
|
||||
glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ) ;
|
||||
glTexParameterf ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ) ;
|
||||
|
||||
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ) ;
|
||||
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ) ;
|
||||
fillTexture ( (void *) NULL ) ;
|
||||
|
||||
glGenFramebuffersEXT ( 1, & fboHandle ) ;
|
||||
glGenRenderbuffersEXT ( 1, & depth_rb ) ;
|
||||
glBindFramebufferEXT ( GL_FRAMEBUFFER_EXT, fboHandle ) ;
|
||||
|
||||
glFramebufferTexture2DEXT ( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
GL_TEXTURE_2D, textureHandle, 0 ) ;
|
||||
|
||||
// initialize depth renderbuffer
|
||||
#ifdef NEED_DEPTH_BUFFER
|
||||
static GLuint depth_rb = 0 ;
|
||||
|
||||
if ( depth_rb == 0 )
|
||||
{
|
||||
glGenRenderbuffersEXT ( 1, & depth_rb ) ;
|
||||
glBindRenderbufferEXT ( GL_RENDERBUFFER_EXT, depth_rb ) ;
|
||||
glRenderbufferStorageEXT ( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,
|
||||
width, height ) ;
|
||||
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, depth_rb ) ;
|
||||
}
|
||||
else
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, depth_rb ) ;
|
||||
#else
|
||||
glDisable ( GL_DEPTH_TEST ) ;
|
||||
glDepthMask ( 0 ) ;
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT , GL_DEPTH_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, 0 ) ;
|
||||
#endif
|
||||
|
||||
#ifdef NEED_STENCIL_BUFFER
|
||||
static GLuint stencil_rb ;
|
||||
static GLuint stencil_rb = 0 ;
|
||||
|
||||
if ( stencil_rb == 0 )
|
||||
{
|
||||
glGenRenderbuffersEXT ( 1, & stencil_rb ) ;
|
||||
// initialize stencil renderbuffer
|
||||
glBindRenderbufferEXT ( GL_RENDERBUFFER_EXT, stencil_rb ) ;
|
||||
glRenderbufferStorageEXT ( GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX, width, height ) ;
|
||||
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT,
|
||||
glRenderbufferStorageEXT ( GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX,
|
||||
width, height ) ;
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT , GL_STENCIL_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, stencil_rb ) ;
|
||||
}
|
||||
else
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT , GL_STENCIL_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, stencil_rb ) ;
|
||||
#else
|
||||
glDisable ( GL_STENCIL_TEST ) ;
|
||||
glStencilMask ( 0 ) ;
|
||||
glFramebufferRenderbufferEXT ( GL_FRAMEBUFFER_EXT , GL_STENCIL_ATTACHMENT_EXT,
|
||||
GL_RENDERBUFFER_EXT, 0 ) ;
|
||||
#endif
|
||||
|
||||
// Check framebuffer completeness at the end of initialization.
|
||||
@@ -278,6 +327,7 @@ void FrameBufferObject::paint ()
|
||||
glDisable ( GL_CULL_FACE ) ;
|
||||
glDisable ( GL_BLEND ) ;
|
||||
|
||||
|
||||
float s_min = 0.5f / (float) width ;
|
||||
float s_max = (((float) width) - 0.5f) / (float) width ;
|
||||
float t_min = 0.5f / (float) height ;
|
||||
|
||||
@@ -3,7 +3,9 @@ GLuint makeTextureTarget ( GLuint textureHandle ) ;
|
||||
void renderTo2DTexture ( GLuint fboHandle ) ;
|
||||
void renderToFrameBuffer () ;
|
||||
|
||||
//#define NEED_STENCIL_BUFFER 1
|
||||
// #define NEED_STENCIL_BUFFER 1
|
||||
// #define NEED_DEPTH_BUFFER 1
|
||||
|
||||
|
||||
enum fboDataType
|
||||
{
|
||||
@@ -44,11 +46,6 @@ class FrameBufferObject
|
||||
|
||||
GLuint textureHandle ;
|
||||
GLuint fboHandle ;
|
||||
GLuint depth_rb ;
|
||||
|
||||
#ifdef NEED_STENCIL_BUFFER
|
||||
GLuint stencil_rb ;
|
||||
#endif
|
||||
|
||||
void fillTexture ( void *data ) ;
|
||||
void fetchTexture ( void *data ) ;
|
||||
@@ -61,6 +58,12 @@ public:
|
||||
|
||||
void makeDestination ()
|
||||
{
|
||||
#ifndef NEED_DEPTH_BUFFER
|
||||
glDepthMask ( 0 ) ;
|
||||
#endif
|
||||
#ifndef NEED_STENCIL_BUFFER
|
||||
glStencilMask ( 0 ) ;
|
||||
#endif
|
||||
glBindFramebufferEXT ( GL_FRAMEBUFFER_EXT, fboHandle ) ;
|
||||
}
|
||||
|
||||
@@ -83,5 +86,11 @@ public:
|
||||
inline void restoreFrameBuffer ()
|
||||
{
|
||||
glBindFramebufferEXT ( GL_FRAMEBUFFER_EXT, 0 ) ;
|
||||
#ifndef NEED_DEPTH_BUFFER
|
||||
glDepthMask ( 1 ) ;
|
||||
#endif
|
||||
#ifndef NEED_STENCIL_BUFFER
|
||||
glStencilMask ( 1 ) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -2,15 +2,6 @@
|
||||
#include "shaderSupport.h"
|
||||
#include "fboSupport.h"
|
||||
|
||||
static void showGLerror ()
|
||||
{
|
||||
GLenum err ;
|
||||
|
||||
while ( (err = glGetError()) != GL_NO_ERROR )
|
||||
fprintf ( stderr, "OpenGL Error: %s\n", gluErrorString ( err ) ) ;
|
||||
}
|
||||
|
||||
|
||||
#define DEFAULT_VERT_SHADER \
|
||||
"void main()" \
|
||||
"{" \
|
||||
@@ -99,9 +90,9 @@ static void showShaderInfo ( const char *which,
|
||||
{
|
||||
int len = 0 ;
|
||||
|
||||
showGLerror () ;
|
||||
showGLerror ( "showShaderInfo_0" ) ;
|
||||
glGetObjectParameterivARB ( handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, (GLint*) &len ) ;
|
||||
showGLerror () ;
|
||||
showGLerror ( "showShaderInfo_1" ) ;
|
||||
|
||||
if ( len > 0 )
|
||||
{
|
||||
@@ -183,7 +174,7 @@ GLint GLSL_ShaderPair::getUniformLocation ( const char *uni_name )
|
||||
uni_name,
|
||||
name ) ;
|
||||
else
|
||||
showGLerror () ;
|
||||
showGLerror ( "GLSL_ShaderPair::getUniformLocation" ) ;
|
||||
|
||||
return loc ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user