예제 #1
0
void InstancingApp::configurationCallback(NvGLConfiguration& config)
{
    // The GBuffer FBO needs depth, but the onscreen buffer does not
    config.depthBits = 24;
    config.stencilBits = 0;
    config.apiVer = NvGLAPIVersionES3();
}
예제 #2
0
void FXAA::initRendering(void) {
    m_aspectRatio = 1.0;
    NvAssetLoaderAddSearchPath("es3-kepler/FXAA");

    if(!requireMinAPIVersion(NvGLAPIVersionES3()))
        return;

    m_transformer->setTranslationVec(nv::vec3f(0.0f, 0.0f, -3.0f));
    m_transformer->setRotationVec(nv::vec3f(NV_PI*0.15f, 0.0f, 0.0f));

    float* buf = genLineSphere(40, &m_sphereBufferSize, 1);
    glGenBuffers(1, &m_sphereVBO);
    glBindBuffer(GL_ARRAY_BUFFER, m_sphereVBO);
    glBufferData(GL_ARRAY_BUFFER, m_sphereBufferSize, buf, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    delete[] buf;

    int i;
    void* pData=0;
    for (i=0; i<2; i++) {
        m_objectFileSize[i] = LoadMdlDataFromFile(model_files[i], &pData);
        glGenBuffers(1, &m_object[i]);
        glBindBuffer(GL_ARRAY_BUFFER, m_object[i]);
        glBufferData(GL_ARRAY_BUFFER, m_objectFileSize[i], pData, GL_STATIC_DRAW);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        free(pData);
    }

    //init shaders
    m_FXAAProg[0] = NvGLSLProgram::createFromFiles("shaders/Blit.vert", "shaders/Blit.frag");
    for (i=1; i<5; i++) {
        m_FXAAProg[i] = NvGLSLProgram::createFromFiles("shaders/FXAA.vert",
                        (getGLContext()->getConfiguration().apiVer.api == NvGLAPI::GL)
                        ? fxaa_quality_frg[i-1] : fxaa_quality_frg_es[i-1]);
    }
    m_LineProg = NvGLSLProgram::createFromFiles("shaders/DrawLine.vert", "shaders/DrawLine.frag");
    m_ObjectProg = NvGLSLProgram::createFromFiles("shaders/Object.vert", "shaders/Object.frag");

    //init textures
    genRenderTexture();
    glBindTexture(GL_TEXTURE_2D, m_sourceTexture);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glBindTexture(GL_TEXTURE_2D, 0);

    nv::perspective(m_projection_matrix, FOV * 0.5f, getGLContext()->width()/(float)getGLContext()->height(), Z_NEAR, Z_FAR);

    CHECK_GL_ERROR();
}
예제 #3
0
void Mercury::configurationCallback(NvGLConfiguration& config)
{ 
    config.depthBits = 24; 
    config.stencilBits = 0; 
	config.apiVer = NvGLAPIVersionES3();
}
예제 #4
0
void InstancingApp::initRendering(void) {
    m_transformer->setTranslationVec(isMobilePlatform()
                                     ? nv::vec3f(0.0f, 0.0f, -40.0f) : nv::vec3f(-20.0f, 0.0f, -100.0f));

    if( requireMinAPIVersion(NvGLAPIVersionES3(), false) ) {
        m_hwInstancing = true;
        glDrawElementsInstancedInternal = (PFNDrawElementsInstanced)getGLContext()->getGLProcAddress("glDrawElementsInstanced");
        glVertexAttribDivisorInternal = (PFNVertexAttribDivisor)getGLContext()->getGLProcAddress("glVertexAttribDivisor");
    } else {
        // We need at least _one_ of these two extensions
        if (!requireExtension("GL_ARB_instanced_arrays", false) &&
                !requireExtension("GL_NV_draw_instanced", false)) {
            m_hwInstancing              = false;
            m_instancingOptions         = SHADER_INSTANCING;
        } else {
            m_hwInstancing              = true;
            if (requireExtension("GL_ARB_instanced_arrays", false) ) {
                glDrawElementsInstancedInternal = (PFNDrawElementsInstanced)getGLContext()->getGLProcAddress("glDrawElementsInstancedARB");
                glVertexAttribDivisorInternal = (PFNVertexAttribDivisor)getGLContext()->getGLProcAddress("glVertexAttribDivisorARB");
            }
            else
            {
                glDrawElementsInstancedInternal = (PFNDrawElementsInstanced)getGLContext()->getGLProcAddress("glDrawElementsInstancedNV");
                glVertexAttribDivisorInternal = (PFNVertexAttribDivisor)getGLContext()->getGLProcAddress("glVertexAttribDivisorNV");
            }
        }
    }

    if( m_hwInstancing == false )
    {
        m_instancingOptions = SHADER_INSTANCING;
    }

    NvAssetLoaderAddSearchPath("es2-aurora/InstancingApp");

    LOGI("Hardware Instancing %s\n", m_hwInstancing ? "Available" : "Not available" );

    if (getGLContext()->getConfiguration().apiVer.api == NvGLAPI::GL) {
        NvGLSLProgram::setGlobalShaderHeader("#version 130\n");
    }
    else {
        NvGLSLProgram::setGlobalShaderHeader("#version 300 es\n");
    }

    //init the shaders
    m_shaders[0] = NvGLSLProgram::createFromFiles("shaders/boxes.vert", "shaders/boxes.frag");
    m_shaders[1] = NvGLSLProgram::createFromFiles("shaders/grass.vert", "shaders/grass.frag");
    m_shaders[2] = NvGLSLProgram::createFromFiles("shaders/boxes_instanced.vert", "shaders/boxes.frag");
    m_shaders[3] = NvGLSLProgram::createFromFiles("shaders/grass_instanced.vert", "shaders/grass.frag");

    NvGLSLProgram::setGlobalShaderHeader(NULL);

    initShaders();

    CHECK_GL_ERROR();

    //load g_pModel
    loadModelFromFile("models/cube.obj", 0);
    loadModelFromFile("models/grass.obj", 1);

    CHECK_GL_ERROR();

    GLuint texID;

    NvImage::VerticalFlip(false);

    CHECK_GL_ERROR();
    texID = NvImageGL::UploadTextureFromDDSFile("images/rock.dds");
    if( texID > 0) {
        configTexture( texID, 0 );
        configTexture( texID, 2 );
    }
    CHECK_GL_ERROR();

    texID = NvImageGL::UploadTextureFromDDSFile( "images/grass.dds" );
    if( texID > 0) {
        configTexture( texID, 1 );
        configTexture( texID, 3 );
    }
    CHECK_GL_ERROR();

    texID = NvImageGL::UploadTextureFromDDSFile( "images/rock.dds" );
    if( texID > 0)
        configTexture( texID, 2 );
    CHECK_GL_ERROR();

    texID = NvImageGL::UploadTextureFromDDSFile( "images/grass.dds" );
    if( texID > 0)
        configTexture( texID, 3 );
    CHECK_GL_ERROR();

    NvImage::VerticalFlip(false);

    glClearColor(0.0, 0.0, 0.0, 1.0);

    CHECK_GL_ERROR();
}