Ignore:
Timestamp:
07/03/08 11:39:16 (16 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/App/Demos/Vis/FriendlyCulling/src
Files:
4 added
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/chcdemo.cpp

    r2809 r2810  
    3333 
    3434GLuint fbo; 
    35 GLuint depthbuffer; 
    36 GLuint colorbuffer; 
    37 GLuint colorbuffer2; 
    38 GLuint depthTex; 
    39 GLuint colorTex; 
    40 GLuint colorTex2; 
    41  
    42 GLuint normalTex; 
    43  
    44 GLuint fbo2; 
    45 GLuint occlusionbuffer; 
    46 GLuint occlusionTex; 
    47  
    48 int texWidth2 = 512; 
    49 int texHeight2 = 512; 
     35 
     36GLuint depthBuffer; 
     37 
     38GLuint positionsBuffer; 
     39GLuint colorsBuffer; 
     40GLuint normalsBuffer; 
     41 
     42GLuint positionsTex; 
     43GLuint colorsTex; 
     44GLuint normalsTex; 
     45 
     46GLuint noiseTex; 
     47 
    5048 
    5149/// the renderable scene geometry 
     
    194192void GenerateSamples(); 
    195193 
     194void CreateNoiseTex2D(); 
     195 
    196196void ComputeViewVectors(Vector3 &tl, Vector3 &tr, Vector3 &bl, Vector3 &br); 
    197197 
    198 GLenum mrt[] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT}; 
    199  
    200  
    201 // cg stuff 
     198GLenum mrt[] = {GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_COLOR_ATTACHMENT2_EXT}; 
     199 
     200 
     201///////// 
     202//-- cg stuff 
     203 
    202204static CGcontext sCgContext = NULL; 
    203 static CGprogram sCgLinearDepthProgram = NULL; 
     205static CGprogram sCgMrtVertexProgram = NULL; 
    204206static CGprogram sCgSSAOProgram = NULL; 
    205 static CGprogram sCgTestProgram = NULL; 
     207static CGprogram sCgMrtFragmentProgram = NULL; 
    206208 
    207209static CGprofile sCgFragmentProfile; 
    208210static CGprofile sCgVertexProfile;  
    209211 
    210 static CGparameter sTextureParam; 
    211 static CGparameter sSceneTextureParam; 
    212 static CGparameter sNormalTextureParam; 
    213  
    214 static CGparameter sTexSizeParam;  
     212static CGparameter sColorsTexParam; 
     213static CGparameter sPositionsTexParam; 
     214static CGparameter sNormalsTexParam; 
     215static CGparameter sNoiseTexParam; 
     216 
     217/*static CGparameter sTexSizeParam;  
    215218static CGparameter sSamplesParam;  
    216219static CGparameter sEyeVecParam;  
    217220static CGparameter sRadiusParam;  
    218  
    219 //static CGparameter sPositionParam; 
     221*/ 
     222static CGparameter sProjectionMatrixParam; 
    220223static CGparameter sModelViewMatrixParam;        
    221224static CGparameter sMaxDepthParam; 
     
    284287        InitExtensions(); 
    285288        InitGLstate(); 
     289         
    286290        //InitRenderTexture(); 
    287291        InitFBO(); 
    288  
     292         
    289293        LeftMotion(0, 0); 
    290294        MiddleMotion(0, 0); 
     
    317321                exit(0); 
    318322        } 
     323 
     324        // create noise texture for ssao 
     325        CreateNoiseTex2D(); 
    319326 
    320327 
     
    374381        cgGLSetOptimalOptions(sCgVertexProfile); 
    375382 
    376         sCgLinearDepthProgram =  
     383        sCgMrtVertexProgram =  
    377384                cgCreateProgramFromFile(sCgContext,  
    378385                                                                CG_SOURCE, 
    379                                                                 "src/lineardepth.cg",  
     386                                                                "src/shaders/mrt.cg",  
    380387                                                                sCgVertexProfile, 
    381                                                                 "main", 
     388                                                                "vtx", 
    382389                                                                NULL); 
    383390 
    384         if(sCgLinearDepthProgram != NULL) 
    385         { 
    386                 cgGLLoadProgram(sCgLinearDepthProgram); 
    387          
    388                 sModelViewMatrixParam = cgGetNamedParameter(sCgLinearDepthProgram, "ModelViewProj"); 
    389         } 
    390  
    391         sCgTestProgram =  
     391        if(sCgMrtVertexProgram != NULL) 
     392        { 
     393                cgGLLoadProgram(sCgMrtVertexProgram); 
     394         
     395                sModelViewMatrixParam = cgGetNamedParameter(sCgMrtVertexProgram, "ModelViewProj"); 
     396        } 
     397 
     398        sCgMrtFragmentProgram =  
    392399                cgCreateProgramFromFile(sCgContext,  
    393400                                                                CG_SOURCE, 
    394                                                                 "src/test2.cg",  
     401                                                                "src/shaders/mrt.cg",  
    395402                                                                sCgFragmentProfile, 
    396                                                                 "main", 
     403                                                                "frag", 
    397404                                                                NULL); 
    398405 
    399         if(sCgTestProgram != NULL) 
    400         { 
    401                 cgGLLoadProgram(sCgTestProgram); 
    402  
    403                 sMaxDepthParam = cgGetNamedParameter(sCgTestProgram, "maxDepth"); 
     406        if(sCgMrtFragmentProgram != NULL) 
     407        { 
     408                cgGLLoadProgram(sCgMrtFragmentProgram); 
     409 
     410                sMaxDepthParam = cgGetNamedParameter(sCgMrtFragmentProgram, "maxDepth"); 
    404411                cgGLSetParameter1f(sMaxDepthParam, 1.0f / myfar); 
    405412        } 
     
    415422                cgCreateProgramFromFile(sCgContext,  
    416423                                                                CG_SOURCE, 
    417                                                                 "src/ssao.cg",  
     424                                                                "src/shaders/deferred.cg",  
    418425                                                                //"src/test.cg",  
    419426                                                                sCgFragmentProfile, 
     
    426433 
    427434                // we need size of texture for scaling 
    428                 sTextureParam = cgGetNamedParameter(sCgSSAOProgram, "lindepth");   
    429                 sSceneTextureParam = cgGetNamedParameter(sCgSSAOProgram, "scene");   
    430                 sNormalTextureParam = cgGetNamedParameter(sCgSSAOProgram, "normal");   
    431                 sTexSizeParam = cgGetNamedParameter(sCgSSAOProgram, "invTexSize"); 
     435                sPositionsTexParam = cgGetNamedParameter(sCgSSAOProgram, "positions");   
     436                sColorsTexParam = cgGetNamedParameter(sCgSSAOProgram, "colors");   
     437                sNormalsTexParam = cgGetNamedParameter(sCgSSAOProgram, "normals");   
     438                sNoiseTexParam = cgGetNamedParameter(sCgSSAOProgram, "noiseTexture");   
     439 
     440                sProjectionMatrixParam = cgGetNamedParameter(sCgSSAOProgram, "ProjTrafo"); 
     441 
     442                /*sTexSizeParam = cgGetNamedParameter(sCgSSAOProgram, "invTexSize"); 
    432443                sRadiusParam = cgGetNamedParameter(sCgSSAOProgram, "radius"); 
    433444                sEyeVecParam = cgGetNamedParameter(sCgSSAOProgram, "eyevec"); 
     
    436447                cgGLSetParameter1f(sTexSizeParam, 1.0f / (float)texWidth); 
    437448                cgGLSetParameter1f(sRadiusParam, radius); 
    438                 cgGLSetParameterArray3f(sSamplesParam, 0, 32, (const float *)samples); 
     449                cgGLSetParameterArray3f(sSamplesParam, 0, 32, (const float *)samples);*/ 
    439450        } 
    440451        else 
     
    480491 
    481492void InitFBO() 
    482 {        
     493{ 
    483494        glGenFramebuffersEXT(1, &fbo); 
    484495        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); 
    485496 
    486         // create color buffer 
     497        ////////// 
     498        //-- positions buffer 
     499 
    487500        int samples = 8; 
    488501 
    489         glGenRenderbuffersEXT(1, &colorbuffer); 
    490         //glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight); 
    491         glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, GL_FLOAT_RGBA_NV, texWidth, texHeight); 
    492         glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorbuffer); 
    493         glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, colorbuffer); 
    494  
    495         glGenTextures(1, &colorTex); 
    496         glBindTexture(GL_TEXTURE_2D, colorTex); 
     502        //////////// 
     503        //-- colors buffer 
     504 
     505        glGenRenderbuffersEXT(1, &colorsBuffer); 
     506        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorsBuffer); 
     507        glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight); 
     508         
     509        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, colorsBuffer); 
     510         
     511        glGenTextures(1, &colorsTex); 
     512        glBindTexture(GL_TEXTURE_2D, colorsTex); 
     513 
    497514        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB,  texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL); 
    498515        glGenerateMipmapEXT(GL_TEXTURE_2D); 
    499         glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorTex, 0); 
     516        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, colorsTex, 0); 
    500517 
    501518        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     
    506523 
    507524        PrintFBOStatus(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)); 
    508  
    509  
    510         glGenRenderbuffersEXT(1, &colorbuffer2); 
     525        glGenRenderbuffersEXT(1, &positionsBuffer); 
     526        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, positionsBuffer); 
    511527        glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA16F_ARB, texWidth, texHeight); 
    512         glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, colorbuffer2); 
    513         glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_RENDERBUFFER_EXT, colorbuffer2); 
    514  
    515         glGenTextures(1, &colorTex2); 
    516         glBindTexture(GL_TEXTURE_2D, colorTex2); 
     528        //glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, GL_RGBA16F_ARB, texWidth, texHeight); 
     529         
     530        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_RENDERBUFFER_EXT, positionsBuffer); 
     531 
     532        glGenTextures(1, &positionsTex); 
     533        glBindTexture(GL_TEXTURE_2D, positionsTex); 
    517534        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB,  texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, NULL); 
    518535        glGenerateMipmapEXT(GL_TEXTURE_2D); 
    519         glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, colorTex2, 0); 
     536        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, positionsTex, 0); 
    520537 
    521538        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    522539        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
    523540 
     541        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
     542        //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
     543 
     544        PrintFBOStatus(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)); 
     545         
     546         
     547        //////// 
     548        //-- normals buffer 
     549 
     550        glGenRenderbuffersEXT(1, &normalsBuffer); 
     551        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, normalsBuffer); 
     552        glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, texWidth, texHeight); 
     553         
     554        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_RENDERBUFFER_EXT, normalsBuffer); 
     555 
     556        glGenTextures(1, &normalsTex); 
     557        glBindTexture(GL_TEXTURE_2D, normalsTex); 
     558        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,  texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 
     559        glGenerateMipmapEXT(GL_TEXTURE_2D); 
     560        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, normalsTex, 0); 
     561 
     562        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     563        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
     564 
    524565        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    525566        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
     
    527568        PrintFBOStatus(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)); 
    528569 
     570 
    529571        /////////// 
    530         // create depth buffer 
    531  
    532         glGenRenderbuffersEXT(1, &depthbuffer);  
    533         glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer); 
     572        //-- create depth buffer 
     573 
     574        glGenRenderbuffersEXT(1, &depthBuffer);  
     575        glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBuffer); 
    534576        glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, texWidth, texHeight); 
    535         glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer); 
     577        glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthBuffer); 
    536578 
    537579         
     
    563605 
    564606        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);*/ 
     607        PrintGLerror("fbo"); 
    565608} 
    566609 
     
    838881 
    839882        cgGLEnableProfile(sCgFragmentProfile); 
    840         cgGLBindProgram(sCgTestProgram); 
     883        cgGLBindProgram(sCgMrtFragmentProgram); 
    841884 
    842885        cgGLEnableProfile(sCgVertexProfile); 
    843         cgGLBindProgram(sCgLinearDepthProgram); 
    844  
    845         glDrawBuffers(2, mrt); 
     886        cgGLBindProgram(sCgMrtVertexProgram); 
     887 
     888        glDrawBuffers(3, mrt); 
    846889         
    847890        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     
    866909        SetupEyeView(); 
    867910 
    868         Vector3 dir =  camera->GetDirection(); 
    869         cgGLSetParameter3f(sEyeVecParam, dir.x, dir.y, dir.z); 
     911        Vector3 dir = camera->GetDirection(); 
     912        //cgGLSetParameter3f(sEyeVecParam, dir.x, dir.y, dir.z); 
    870913 
    871914        // set modelview matrix for shaders 
     
    906949 
    907950        glPopAttrib(); 
     951 
     952        cgGLSetStateMatrixParameter(sProjectionMatrixParam, CG_GL_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY); 
    908953         
    909954        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 
     
    13991444        DEL_PTR(renderQueue); 
    14001445 
    1401         if (sCgLinearDepthProgram) 
    1402                 cgDestroyProgram(sCgLinearDepthProgram); 
     1446        if (sCgMrtVertexProgram) 
     1447                cgDestroyProgram(sCgMrtVertexProgram); 
    14031448        if (sCgSSAOProgram) 
    14041449                cgDestroyProgram(sCgSSAOProgram); 
     
    15681613 
    15691614 
    1570 void DisplayRenderTexture2() 
    1571 { 
    1572         glEnable(GL_TEXTURE_2D); 
    1573         glBindTexture(GL_TEXTURE_2D, occlusionTex); 
    1574  
     1615void DisplayRenderTexture() 
     1616{ 
     1617        glDisable(GL_TEXTURE_2D); 
     1618        //glEnable(GL_TEXTURE_2D); 
    15751619        glDisable(GL_LIGHTING); 
    1576  
     1620        //glBindTexture(GL_TEXTURE_2D, noiseTex); 
    15771621        glMatrixMode(GL_PROJECTION); 
    15781622        glPushMatrix(); 
     
    15821626        glPushMatrix(); 
    15831627        glLoadIdentity(); 
    1584          
    1585         glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2); 
    1586         glPushAttrib(GL_VIEWPORT_BIT); 
    1587         glViewport(0, 0, texWidth2, texHeight2); 
    1588  
    1589         glOrtho(-0.5f, 0.5f, -0.5f, 0.5f, 0, 1); 
    1590  
    1591         //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    1592         //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    1593          
    1594         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    1595  
    1596         glColor3f(1.0f, 1.0f, 1.0f); 
    1597  
    1598         glBegin(GL_QUADS); 
    1599         glTexCoord2f(0, 0); glVertex3f(-1, -1, -0.5f); 
    1600         glTexCoord2f(1, 0); glVertex3f( 1, -1, -0.5f); 
    1601         glTexCoord2f(1, 1); glVertex3f( 1,  1, -0.5f); 
    1602         glTexCoord2f(0, 1); glVertex3f(-1,  1, -0.5f); 
    1603         glEnd(); 
    1604  
    1605         glEnable(GL_LIGHTING); 
    1606         glDisable(GL_TEXTURE_2D); 
    1607          
    1608         glMatrixMode(GL_PROJECTION); 
    1609         glPopMatrix(); 
    1610  
    1611         glMatrixMode(GL_MODELVIEW); 
    1612         glPopMatrix(); 
    1613  
    1614         glPopAttrib(); 
    1615         glBindTexture(GL_TEXTURE_2D, 0); 
    1616  
    1617         PrintGLerror("displaytexture2"); 
    1618 } 
    1619  
    1620 void DisplayRenderTexture() 
    1621 { 
    1622         glDisable(GL_TEXTURE_2D); 
    1623         glDisable(GL_LIGHTING); 
    1624  
    1625         glMatrixMode(GL_PROJECTION); 
    1626         glPushMatrix(); 
    1627         glLoadIdentity(); 
    1628  
    1629         glMatrixMode(GL_MODELVIEW); 
    1630         glPushMatrix(); 
    1631         glLoadIdentity(); 
    1632          
    1633         /*glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2); 
    1634         glPushAttrib(GL_VIEWPORT_BIT); 
    1635         glViewport(0, 0, texWidth2, texHeight2); 
    1636 */ 
     1628 
    16371629        glOrtho(-0.5f, 0.5f, -0.5f, 0.5f, 0, 1); 
    16381630         
     
    16421634        cgGLBindProgram(sCgSSAOProgram); 
    16431635 
    1644         cgGLEnableTextureParameter(sTextureParam); 
    1645         cgGLSetTextureParameter(sTextureParam, colorTex2); 
    1646          
    1647         cgGLEnableTextureParameter(sSceneTextureParam); 
    1648         cgGLSetTextureParameter(sSceneTextureParam, colorTex); 
    1649          
    1650         cgGLEnableTextureParameter(sNormalTextureParam); 
    1651         cgGLSetTextureParameter(sNormalTextureParam, normalTex); 
     1636        cgGLEnableTextureParameter(sPositionsTexParam); 
     1637        cgGLSetTextureParameter(sPositionsTexParam, positionsTex); 
     1638         
     1639        cgGLEnableTextureParameter(sColorsTexParam); 
     1640        cgGLSetTextureParameter(sColorsTexParam, colorsTex); 
     1641         
     1642        cgGLEnableTextureParameter(sNormalsTexParam); 
     1643        cgGLSetTextureParameter(sNormalsTexParam, normalsTex); 
     1644 
     1645        cgGLEnableTextureParameter(sNoiseTexParam); 
     1646        cgGLSetTextureParameter(sNoiseTexParam, noiseTex); 
    16521647 
    16531648        Vector3 tl, tr, bl, br; 
     
    16701665        glEnd(); 
    16711666 
    1672         cgGLDisableTextureParameter(sTextureParam); 
    1673         cgGLDisableTextureParameter(sSceneTextureParam); 
     1667        cgGLDisableTextureParameter(sColorsTexParam); 
     1668        cgGLDisableTextureParameter(sPositionsTexParam); 
     1669        cgGLDisableTextureParameter(sNormalsTexParam); 
     1670        cgGLDisableTextureParameter(sNoiseTexParam); 
     1671 
    16741672        cgGLDisableProfile(sCgFragmentProfile); 
    16751673         
     
    16831681        glPopMatrix(); 
    16841682 
    1685         //glPopAttrib(); 
    1686         //glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2); 
    1687  
     1683         
    16881684        PrintGLerror("displaytexture"); 
    1689         //DisplayRenderTexture2(); 
    16901685} 
    16911686 
     
    17351730        cout << "tr: " << tr << endl; 
    17361731        cout << "bl: " << bl << endl; 
    1737         cout << "br: " << bl << endl << endl;*/ 
    1738 } 
    1739  
    1740  
    1741 void CreateNormalMap() 
     1732        cout << "br: " << bl << endl << endl; 
     1733        */ 
     1734} 
     1735 
     1736 
     1737void CreateNoiseTex3D() 
    17421738{ 
    17431739        Vector3 *data = new Vector3[texWidth * texHeight]; 
     
    17531749 
    17541750                data[i] = Vector3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)); 
    1755                 data[i] += 1.0f;         
    1756                 data[i] *= 0.5f; 
    1757         } 
    1758  
    1759         glGenTextures(1, &normalTex); 
    1760         glBindTexture(GL_TEXTURE_2D, normalTex); 
     1751                // bring in 0 .. 1 so we can use unsigned byte 
     1752                data[i] = data[i] * 0.5f + 0.5f; 
     1753        } 
     1754 
     1755        glGenTextures(1, &noiseTex); 
     1756        glBindTexture(GL_TEXTURE_2D, noiseTex); 
    17611757        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,  texWidth, texHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, data); 
    1762 } 
     1758        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
     1759        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
     1760 
     1761        glBindTexture(GL_TEXTURE_2D, 0); 
     1762 
     1763        PrintGLerror("noisetexture"); 
     1764} 
     1765 
     1766#if 0 
     1767void CreateNoiseTex2D() 
     1768{ 
     1769        Vector3 *data = new Vector3[texWidth * texHeight]; 
     1770 
     1771        for (int i = 0; i < texWidth * texHeight; ++ i) 
     1772        { 
     1773                // create random samples over sphere 
     1774                const float rx = RandomValue(0, 1); 
     1775                const float theta = 2.0f * acos(sqrt(1.0f - rx)); 
     1776 
     1777                data[i] = Vector3(sin(theta), cos(theta), 0); 
     1778 
     1779                //if (i % 10000) cout << "vec: " << data[i] << endl; 
     1780         
     1781                // bring in 0 .. 1 so we could use unsigned byte 
     1782                data[i] = 1;//data[i] * 0.5f + 0.5f; 
     1783        } 
     1784 
     1785        glGenTextures(1, &noiseTex); 
     1786        glBindTexture(GL_TEXTURE_2D, noiseTex); 
     1787        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F_ARB, texWidth, texHeight, 0, GL_RGB, GL_FLOAT, (float *)data); 
     1788         
     1789        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     1790        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
     1791 
     1792        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
     1793        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
     1794 
     1795        glBindTexture(GL_TEXTURE_2D, 0); 
     1796 
     1797        PrintGLerror("noisetexture"); 
     1798} 
     1799 
     1800#else 
     1801void CreateNoiseTex2D() 
     1802{int w=256; 
     1803int h=256; 
     1804        GLubyte *data = new GLubyte[texWidth * texHeight * 4]; 
     1805 
     1806        for (int i = 0; i < texWidth * texHeight * 4; i += 4) 
     1807        { 
     1808                // create random samples over sphere 
     1809                const float rx = RandomValue(0, 1); 
     1810                const float theta = 2.0f * acos(sqrt(1.0f - rx)); 
     1811 
     1812                data[i + 0] = (GLubyte)((sin(theta) * 0.5f + 0.5f) * 255.0f); 
     1813                data[i + 1] = (GLubyte)((cos(theta) * 0.5f + 0.5f) * 255.0f); 
     1814                data[i + 2] = 0; 
     1815                data[i + 3] = 255; 
     1816 
     1817                //if (i % 100000) cout << "vec: " << " " << (int)data[i] << " " << (int)data[i + 1] << endl; 
     1818        } 
     1819 
     1820        glEnable(GL_TEXTURE_2D); 
     1821        glGenTextures(1, &noiseTex); 
     1822        glBindTexture(GL_TEXTURE_2D, noiseTex); 
     1823        //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
     1824        glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 
     1825 
     1826        gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, texWidth, texHeight, GL_RGBA, GL_UNSIGNED_BYTE, data); 
     1827        //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); 
     1828        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
     1829        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
     1830        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
     1831        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
     1832 
     1833        glBindTexture(GL_TEXTURE_2D, 0); 
     1834 
     1835        glDisable(GL_TEXTURE_2D); 
     1836 
     1837        cout << "created noise texture" << endl; 
     1838        PrintGLerror("noisetexture"); 
     1839} 
     1840#endif 
Note: See TracChangeset for help on using the changeset viewer.