From 5bc71079ddbeeb61c94829842cab30fefb4581e2 Mon Sep 17 00:00:00 2001 From: Dennis Peeten Date: Thu, 17 Apr 2008 21:52:05 +0000 Subject: shadertest --- headtrack_stereo_demo/headtrack_stereo_demo.sln | 6 + headtrack_stereo_demo/headtrack_stereo_demo.vcproj | 5 +- headtrack_stereo_demo/shaders/greyscale.frag | 5 +- headtrack_stereo_demo/shadertest/shadertest.cpp | 200 ++++++++++++++++++++ headtrack_stereo_demo/shadertest/shadertest.vcproj | 209 +++++++++++++++++++++ .../shadertest/testshaders/greyscale.frag | 51 +++++ .../shadertest/testshaders/greyscale.vert | 19 ++ headtrack_stereo_demo/src/main.cpp | 97 ++++++++-- headtrack_stereo_demo/src/scenerenderer.cpp | 42 +++-- 9 files changed, 602 insertions(+), 32 deletions(-) create mode 100644 headtrack_stereo_demo/shadertest/shadertest.cpp create mode 100644 headtrack_stereo_demo/shadertest/shadertest.vcproj create mode 100644 headtrack_stereo_demo/shadertest/testshaders/greyscale.frag create mode 100644 headtrack_stereo_demo/shadertest/testshaders/greyscale.vert diff --git a/headtrack_stereo_demo/headtrack_stereo_demo.sln b/headtrack_stereo_demo/headtrack_stereo_demo.sln index 24dbc9b..996dd65 100644 --- a/headtrack_stereo_demo/headtrack_stereo_demo.sln +++ b/headtrack_stereo_demo/headtrack_stereo_demo.sln @@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "headtrack_stereo_demo", "headtrack_stereo_demo.vcproj", "{6F0EBF4B-4D70-4501-95EB-2BF909878951}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shadertest", "shadertest\shadertest.vcproj", "{4D268921-0501-4C48-A1CC-C74E556F2599}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -13,6 +15,10 @@ Global {6F0EBF4B-4D70-4501-95EB-2BF909878951}.Debug|Win32.Build.0 = Debug|Win32 {6F0EBF4B-4D70-4501-95EB-2BF909878951}.Release|Win32.ActiveCfg = Release|Win32 {6F0EBF4B-4D70-4501-95EB-2BF909878951}.Release|Win32.Build.0 = Release|Win32 + {4D268921-0501-4C48-A1CC-C74E556F2599}.Debug|Win32.ActiveCfg = Debug|Win32 + {4D268921-0501-4C48-A1CC-C74E556F2599}.Debug|Win32.Build.0 = Debug|Win32 + {4D268921-0501-4C48-A1CC-C74E556F2599}.Release|Win32.ActiveCfg = Release|Win32 + {4D268921-0501-4C48-A1CC-C74E556F2599}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/headtrack_stereo_demo/headtrack_stereo_demo.vcproj b/headtrack_stereo_demo/headtrack_stereo_demo.vcproj index 7c3502e..844c39e 100644 --- a/headtrack_stereo_demo/headtrack_stereo_demo.vcproj +++ b/headtrack_stereo_demo/headtrack_stereo_demo.vcproj @@ -20,6 +20,7 @@ OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)\intermediate" ConfigurationType="1" + ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="1" > diff --git a/headtrack_stereo_demo/shaders/greyscale.frag b/headtrack_stereo_demo/shaders/greyscale.frag index d4b77cd..107e586 100644 --- a/headtrack_stereo_demo/shaders/greyscale.frag +++ b/headtrack_stereo_demo/shaders/greyscale.frag @@ -41,10 +41,11 @@ void main() //convert to grayscale using NTSC conversion weights //gray = dot(color.rgb, vec3(0.299, 0.587, 0.114)); gray = dot(color.rgb, g_ConversionWeights); - + //gray = color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + //copy grayscale to rgb components and use the alpha from the final color gl_FragColor = vec4(gray, gray, gray, color.a); // convert grayscale to sepia //gl_FragColor = vec4(gray * vec3(1.2, 1.0, 0.8), color.a); -} +} \ No newline at end of file diff --git a/headtrack_stereo_demo/shadertest/shadertest.cpp b/headtrack_stereo_demo/shadertest/shadertest.cpp new file mode 100644 index 0000000..28ca58d --- /dev/null +++ b/headtrack_stereo_demo/shadertest/shadertest.cpp @@ -0,0 +1,200 @@ +#include +#include +#include +#include +#include "textfile.h" +GLuint g_GreyScaleShaderProgram; //handle to the grayscale shader program +GLint g_GSConvScaleLoc; //handle to the g_ConversionScale variable in the shader + +void Display() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + float ambdif[] = {0.0, 0.0, 1.0, 1.0}, + em[] = {0.0, 0.0, 0.0, 1.0}, + spec[] = {1.0, 1.0, 1.0, 1.0}; + + glPushMatrix(); + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, ambdif); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, em); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 64.0); + + //glColor3d(0.0, 0.0, 1.0); + glTranslated(0.0, 0.0, -30.0); + glRotated(-60.0, 0.0, 1.0, 0.0); + glutSolidTeapot(20.0); + glPopMatrix(); + + glutSwapBuffers(); +} + +void Idle() +{ + glutPostRedisplay(); +} + +void Reshape(int w, int h) +{ + glViewport(0, 0, w, h); + + //should we set a new projection matrix? + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + glFrustum(-20.0, 20.0, -15.0, 15.0, 100.0, 1100.0); + glTranslated(0.0, 0.0, -100.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +void printShaderInfoLog(GLuint obj) +{ + int infologLength = 0; + int charsWritten = 0; + char *infoLog; + + glGetShaderiv(obj, GL_INFO_LOG_LENGTH,&infologLength); + + if (infologLength > 0) + { + infoLog = (char *)malloc(infologLength); + glGetShaderInfoLog(obj, infologLength, &charsWritten, infoLog); + printf("%s\n",infoLog); + free(infoLog); + } +} + +void printProgramInfoLog(GLuint obj) +{ + int infologLength = 0; + int charsWritten = 0; + char *infoLog; + + glGetProgramiv(obj, GL_INFO_LOG_LENGTH,&infologLength); + + if (infologLength > 0) + { + infoLog = (char *)malloc(infologLength); + glGetProgramInfoLog(obj, infologLength, &charsWritten, infoLog); + printf("%s\n",infoLog); + free(infoLog); + } +} + +bool LoadGreyScaleShader() +{ + GLint l_bStatus; + char *vs_text = NULL,*fs_text = NULL; + GLuint vs = glCreateShader(GL_VERTEX_SHADER), + fs = glCreateShader(GL_FRAGMENT_SHADER); + + vs_text = textFileRead("shaders\\greyscale.vert"); + if (vs_text == NULL) + { + return false; + } + fs_text = textFileRead("shaders\\greyscale.frag"); + if (fs_text == NULL) + { + free(vs_text); + return false; + } + + glShaderSource(vs, 1, (const char**)&vs_text,NULL); + glShaderSource(fs, 1, (const char**)&fs_text,NULL); + + free(vs_text); + free(fs_text); + + glCompileShader(vs); + printShaderInfoLog(vs); + glGetShaderiv(vs, GL_COMPILE_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } + + glCompileShader(fs); + printShaderInfoLog(fs); + glGetShaderiv(fs, GL_COMPILE_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } + + g_GreyScaleShaderProgram = glCreateProgram(); + glAttachShader(g_GreyScaleShaderProgram,fs); + glAttachShader(g_GreyScaleShaderProgram,vs); + + glLinkProgram(g_GreyScaleShaderProgram); + printProgramInfoLog(g_GreyScaleShaderProgram); + glGetProgramiv(g_GreyScaleShaderProgram, GL_LINK_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } + + //g_GSConvScaleLoc = glGetUniformLocation(g_GameState.m_GreyScaleShaderProgram, "g_ConversionWeights"); + + + + return true; +} + +int main (int argc, char** argv) +{ + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); + + glutCreateWindow("HeadTrackDemo"); + glutReshapeWindow(800, 600); + + //register GLUT callback routines + glutDisplayFunc(Display); + glutReshapeFunc(Reshape); + glutIdleFunc(Idle); + + //init openGL state variables + //InitGL(); + glClearColor(1.0, 1.0, 1.0, 1.0); + glClearDepth(1000.0); + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + + + //glEnable(GL_COLOR_MATERIAL); + //glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); + + //init the GL Extension Wrangler library + glewInit(); + + //check for OpenGL 2.0 support + if (!glewIsSupported("GL_VERSION_2_0")) + { + printf("Your graphics hardware/software does not support OpenGL 2.0\n"); + exit(1); + } + + //try to load the grayscale shader + if (!LoadGreyScaleShader()) + { + printf("Failed to load vertex/fragment shader.\n"); + exit(1); + } + + //glutFullScreen(); + + + glUseProgram(g_GreyScaleShaderProgram); + + //action!! + glutMainLoop(); + + return 0; +} \ No newline at end of file diff --git a/headtrack_stereo_demo/shadertest/shadertest.vcproj b/headtrack_stereo_demo/shadertest/shadertest.vcproj new file mode 100644 index 0000000..c6334d0 --- /dev/null +++ b/headtrack_stereo_demo/shadertest/shadertest.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/headtrack_stereo_demo/shadertest/testshaders/greyscale.frag b/headtrack_stereo_demo/shadertest/testshaders/greyscale.frag new file mode 100644 index 0000000..5ef9084 --- /dev/null +++ b/headtrack_stereo_demo/shadertest/testshaders/greyscale.frag @@ -0,0 +1,51 @@ +//uniform vec3 g_ConversionWeights; + + +varying vec4 ambient, diffuse; +varying vec3 normal, lightdir, halfvector; + +//uniform sampler2D tex, hello; + +void main() +{ + float NdotL, NdotHV, gray; + vec3 n = normalize(normal); + vec4 // texcolor = texture2D(tex, gl_TexCoord[0].st), + fragcolor = ambient, + color; + + //compute the dot pruduct of the normalized normal and light direction + NdotL = max(dot(n, lightdir), 0.0); + + if (NdotL > 0.0) + { + //add diffuse light component + fragcolor += diffuse * NdotL; + + //compute the dot product of the normal and half vector (of the lightdir and eye position) + NdotHV = max(dot(n, halfvector), 0.0); + + fragcolor += gl_FrontMaterial.specular * gl_LightSource[0].specular * + pow(NdotHV, gl_FrontMaterial.shininess); + } + + + + //modulate the fragment color with the texel color for the final color +// color = texcolor * fragcolor; + color = fragcolor; + + //smoothstep not available on ati motbility 8600 + //color += smoothstep(1.0,0.2,NdotL) * texture2D(hello, gl_TexCoord[0].st); + + //convert to grayscale using NTSC conversion weights + gray = dot(color.rgb, vec3(0.299, 0.587, 0.114)); + //gray = dot(color.rgb, g_ConversionWeights); + //gray = color.r * 0.299 + color.g * 0.587 + color.b * 0.114; + + //copy grayscale to rgb components and use the alpha from the final color + gl_FragColor = vec4(gray, gray, gray, color.a); + + // convert grayscale to sepia + //gl_FragColor = vec4(gray * vec3(1.2, 1.0, 0.8), color.a); +} \ No newline at end of file diff --git a/headtrack_stereo_demo/shadertest/testshaders/greyscale.vert b/headtrack_stereo_demo/shadertest/testshaders/greyscale.vert new file mode 100644 index 0000000..0eec6f5 --- /dev/null +++ b/headtrack_stereo_demo/shadertest/testshaders/greyscale.vert @@ -0,0 +1,19 @@ +varying vec4 ambient, diffuse; +varying vec3 normal, lightdir, halfvector; + +void main() +{ + //transform the normal + normal = gl_NormalMatrix * gl_Normal; + + //determine the light direction + lightdir = normalize(gl_LightSource[0].position.xyz); + halfvector = normalize(gl_LightSource[0].halfVector.xyz); + + //compute diffuse and ambient terms + diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; + ambient = gl_FrontMaterial.ambient * (gl_LightSource[0].ambient + gl_LightModel.ambient); + + gl_Position = ftransform(); + //gl_TexCoord[0] = gl_MultiTexCoord0; +} diff --git a/headtrack_stereo_demo/src/main.cpp b/headtrack_stereo_demo/src/main.cpp index f7f037a..9bd8d23 100644 --- a/headtrack_stereo_demo/src/main.cpp +++ b/headtrack_stereo_demo/src/main.cpp @@ -16,18 +16,29 @@ GameState_t g_GameState; void InitGL(void) { - GLfloat l_f4LightPos[] = {0.0, 1.0, 1.0, 0.0}, + GLfloat l_f4Light0Diffuse[] = {0.7, 0.7, 0.7, 1.0}, + l_f4LightPos[] = {1.0, 1.0, 1.0, 0.0}, l_f4GlobalAmbient[] = {0.3, 0.3, 0.3, 1.0}; //init OpenGL glLightfv(GL_LIGHT0, GL_POSITION, l_f4LightPos); + glLightfv(GL_LIGHT0, GL_AMBIENT_AND_DIFFUSE, l_f4Light0Diffuse); glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 0); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, l_f4GlobalAmbient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); - glEnable(GL_COLOR_MATERIAL); - glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); + //glEnable(GL_COLOR_MATERIAL); + //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); + //glMateriali(GL_FRONT, GL_SHININESS, 128); + + /*glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); + glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128); + float f4Em[] = {0.0, 0.0, 0.0, 1.0}, + f4Spec[] = {1.0, 1.0, 1.0, 1.0} ; + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, f4Em); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, f4Spec); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 128);*/ glClearColor(1.0, 1.0, 1.0, 1.0); glClearDepth(1000.0); @@ -44,17 +55,19 @@ bool InitWiiMotes() g_GameState.m_pTrackingWiimote->ChangedCallback = NULL; //no callbacks, we just poll... g_GameState.m_pTrackingWiimote->CallbackTriggerFlags = NO_CHANGE; - /*printf("connecting:\n"); - while(!g_Wiimote.Connect(wiimote::FIRST_AVAILABLE)) + printf("connecting:\n"); + int retries = 10; + while(!g_GameState.m_pTrackingWiimote->Connect(wiimote::FIRST_AVAILABLE) && retries > 10) { - Sleep(1000); + Sleep(100); printf("."); + retries--; } - printf("connected\n");*/ - - if (g_GameState.m_pTrackingWiimote->Connect(wiimote::FIRST_AVAILABLE)) + if (g_GameState.m_pTrackingWiimote->IsConnected()) { + printf("connected\n"); + g_GameState.m_pTrackingWiimote->SetLEDs(0x0f); g_GameState.m_pTrackingWiimote->SetReportType(wiimote::IN_BUTTONS_ACCEL_IR_EXT); // IR dots @@ -70,8 +83,43 @@ bool InitWiiMotes() } } +void printShaderInfoLog(GLuint obj) +{ + int infologLength = 0; + int charsWritten = 0; + char *infoLog; + + glGetShaderiv(obj, GL_INFO_LOG_LENGTH,&infologLength); + + if (infologLength > 0) + { + infoLog = (char *)malloc(infologLength); + glGetShaderInfoLog(obj, infologLength, &charsWritten, infoLog); + printf("%s\n",infoLog); + free(infoLog); + } +} + +void printProgramInfoLog(GLuint obj) +{ + int infologLength = 0; + int charsWritten = 0; + char *infoLog; + + glGetProgramiv(obj, GL_INFO_LOG_LENGTH,&infologLength); + + if (infologLength > 0) + { + infoLog = (char *)malloc(infologLength); + glGetProgramInfoLog(obj, infologLength, &charsWritten, infoLog); + printf("%s\n",infoLog); + free(infoLog); + } +} + bool LoadGreyScaleShader() { + GLint l_bStatus; char *vs_text = NULL,*fs_text = NULL; GLuint vs = glCreateShader(GL_VERTEX_SHADER), fs = glCreateShader(GL_FRAGMENT_SHADER); @@ -95,13 +143,32 @@ bool LoadGreyScaleShader() free(fs_text); glCompileShader(vs); + printShaderInfoLog(vs); + glGetShaderiv(vs, GL_COMPILE_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } + glCompileShader(fs); + printShaderInfoLog(fs); + glGetShaderiv(fs, GL_COMPILE_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } g_GameState.m_GreyScaleShaderProgram = glCreateProgram(); glAttachShader(g_GameState.m_GreyScaleShaderProgram,fs); glAttachShader(g_GameState.m_GreyScaleShaderProgram,vs); glLinkProgram(g_GameState.m_GreyScaleShaderProgram); + printProgramInfoLog(g_GameState.m_GreyScaleShaderProgram); + glGetProgramiv(g_GameState.m_GreyScaleShaderProgram, GL_LINK_STATUS, &l_bStatus); + if (l_bStatus == GL_FALSE) + { + return false; + } g_GameState.m_GSConvScaleLoc = glGetUniformLocation(g_GameState.m_GreyScaleShaderProgram, "g_ConversionWeights"); @@ -152,15 +219,15 @@ int main(int argc, char **argv) g_GameState.m_FrustumParms.m_dCameraYCenter = 768.0/2.0; g_GameState.m_FrustumParms.m_dYAngleCorrection = 0.0; //to be initialised correctly g_GameState.m_FrustumParms.m_dScreenHeightWorld = 20.0; - /*g_GameState.m_FrustumParms.m_dCameraYOffset = 130.0; + g_GameState.m_FrustumParms.m_dCameraYOffset = 130.0; g_GameState.m_FrustumParms.m_dScreenHeightMM = 210.0; - g_GameState.m_FrustumParms.m_dScreenAspect = 4.0/3.0;*/ + g_GameState.m_FrustumParms.m_dScreenAspect = 4.0/3.0; g_GameState.m_GSConvScale[0] = 0.299; g_GameState.m_GSConvScale[1] = 0.587; g_GameState.m_GSConvScale[2] = 0.114; - g_GameState.m_FrustumParms.m_dCameraYOffset = 205.0; + /*g_GameState.m_FrustumParms.m_dCameraYOffset = 205.0; g_GameState.m_FrustumParms.m_dScreenHeightMM = 320.0; - g_GameState.m_FrustumParms.m_dScreenAspect = 16.0/10.0; + g_GameState.m_FrustumParms.m_dScreenAspect = 16.0/10.0;*/ g_GameState.m_bHeadTrackingEnabled = false; g_GameState.m_bStereoEnabled = false; @@ -169,6 +236,10 @@ int main(int argc, char **argv) glutFullScreen(); + + //glUseProgram(g_GameState.m_GreyScaleShaderProgram); + + //action!! glutMainLoop(); diff --git a/headtrack_stereo_demo/src/scenerenderer.cpp b/headtrack_stereo_demo/src/scenerenderer.cpp index 2fc7042..a85b5a1 100644 --- a/headtrack_stereo_demo/src/scenerenderer.cpp +++ b/headtrack_stereo_demo/src/scenerenderer.cpp @@ -6,6 +6,18 @@ extern GameState_t g_GameState; +void setColorMaterial(float r, float g, float b, float shin) +{ + float ambdif[] = {r, g, b, 1.0}, + em[] = {0.0, 0.0, 0.0, 1.0}, + spec[] = {1.0, 1.0, 1.0, 1.0}; + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, ambdif); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, em); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shin); +} + void DrawRasterBox() { double l_dHalfHeight = 0.5 * g_GameState.m_FrustumParms.m_dScreenHeightWorld, @@ -20,7 +32,7 @@ void DrawRasterBox() l_dVariable = -l_dHalfHeight + (double)i * l_dDH; //draw U on xz glBegin(GL_LINE_STRIP); - glColor3d(0.0, 0.0, 1.0); + setColorMaterial(0.0, 0.0, 1.0, 256.0); glVertex3d(-l_dHalfWidth, l_dVariable, 0.0); glVertex3d(-l_dHalfWidth, l_dVariable, -l_dBoxDepth); glVertex3d(l_dHalfWidth, l_dVariable, -l_dBoxDepth); @@ -72,7 +84,7 @@ void DrawRasterBox() // // //draw a background rectangle // glBegin(GL_POLYGON); -// glColor3d(0.5, 0.5, 0.5); +// setColorMaterial(0.5, 0.5, 0.5, 128.0); // glVertex2i(0, 0); // glVertex2i(0, 50); // glVertex2i(250, 50); @@ -84,14 +96,14 @@ void DrawRasterBox() // // sprintf_s(l_pFpsString, 256, "FPS : %03.1f", g_pFrameTimer->getTicksPerSecond()); // size_t l_sStrLen = strlen(l_pFpsString); -// glColor3d(0.0, 0.0, 0.0); +// setColorMaterial(0.0, 0.0, 0.0, 128.0); // glRasterPos2i(5, 13); // for (size_t i=0; igetAvgTicksPerSecond()); // l_sStrLen = strlen(l_pFpsString); -// //glColor3d(0.0, 0.0, 1.0); +// //setColorMaterial(0.0, 0.0, 1.0, 128.0); // glRasterPos2i(125, 13); // for (size_t i=0; igetTicksPerSecond()); // l_sStrLen = strlen(l_pFpsString); -// //glColor3d(0.0, 0.0, 1.0); +// //setColorMaterial(0.0, 0.0, 1.0, 128.0); // glRasterPos2i(5, 39); // for (size_t i=0; igetAvgTicksPerSecond()); // l_sStrLen = strlen(l_pFpsString); -// //glColor3d(0.0, 0.0, 1.0); +// //setColorMaterial(0.0, 0.0, 1.0, 128.0); // glRasterPos2i(125, 39); // for (size_t i=0; i