X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=main.cpp;h=16466005327c8ceef3d1afd2d6ecd9ddb367fa6b;hp=8fbff622b06ec1440851b33cdd69aeda1f46d0b8;hb=0291188124d08368ce28b308482604218bd75393;hpb=9e43c799021b7bcca324b988aae44e98b05d10b4 diff --git a/main.cpp b/main.cpp index 8fbff62..1646600 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include #ifdef __APPLE__ #include +#include "cocoa.h" #else #include #endif @@ -145,30 +146,38 @@ void display() { glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightPositions"), 4, glm::value_ptr(lightPositions[0])); glUniform3fv(glGetUniformLocation(pbrProg->progId, "lightColors"), 4, glm::value_ptr(lightColors[0])); - glUniform1i(glGetUniformLocation(pbrProg->progId, "albedoMap"), 0); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, albedoMap); + /* glUniform1i(glGetUniformLocation(pbrProg->progId, "albedoMap"), 0); */ + /* glActiveTexture(GL_TEXTURE0); */ + /* glBindTexture(GL_TEXTURE_2D, albedoMap); */ - glUniform1i(glGetUniformLocation(pbrProg->progId, "normalMap"), 1); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, normalMap); + /* glUniform1i(glGetUniformLocation(pbrProg->progId, "normalMap"), 1); */ + /* glActiveTexture(GL_TEXTURE1); */ + /* glBindTexture(GL_TEXTURE_2D, normalMap); */ - glUniform1i(glGetUniformLocation(pbrProg->progId, "metallicMap"), 2); - glActiveTexture(GL_TEXTURE2); - glBindTexture(GL_TEXTURE_2D, metallicMap); + /* glUniform1i(glGetUniformLocation(pbrProg->progId, "metallicMap"), 2); */ + /* glActiveTexture(GL_TEXTURE2); */ + /* glBindTexture(GL_TEXTURE_2D, metallicMap); */ - glUniform1i(glGetUniformLocation(pbrProg->progId, "roughnessMap"), 3); - glActiveTexture(GL_TEXTURE3); - glBindTexture(GL_TEXTURE_2D, roughnessMap); + /* glUniform1i(glGetUniformLocation(pbrProg->progId, "roughnessMap"), 3); */ + /* glActiveTexture(GL_TEXTURE3); */ + /* glBindTexture(GL_TEXTURE_2D, roughnessMap); */ - glUniform1i(glGetUniformLocation(pbrProg->progId, "aoMap"), 4); - glActiveTexture(GL_TEXTURE4); - glBindTexture(GL_TEXTURE_2D, aoMap); + /* glUniform1i(glGetUniformLocation(pbrProg->progId, "aoMap"), 4); */ + /* glActiveTexture(GL_TEXTURE4); */ + /* glBindTexture(GL_TEXTURE_2D, aoMap); */ glUniform1i(glGetUniformLocation(pbrProg->progId, "irradianceMap"), 5); glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_CUBE_MAP, skybox->getIrradianceMap()); + glUniform1i(glGetUniformLocation(pbrProg->progId, "prefilterMap"), 6); + glActiveTexture(GL_TEXTURE6); + glBindTexture(GL_TEXTURE_CUBE_MAP, skybox->getPrefilterMap()); + + glUniform1i(glGetUniformLocation(pbrProg->progId, "brdfMap"), 7); + glActiveTexture(GL_TEXTURE7); + glBindTexture(GL_TEXTURE_2D, skybox->getBRDFMap()); + pbr->draw(); for (Light &light: lights) drawLight(light); @@ -218,16 +227,18 @@ void init() { pbrProg = new Program("pbrvert.glsl", "pbrfrag.glsl"); glUseProgram(pbrProg->progId); - pbr = new Model("models/sphere.dae", *pbrProg, *skybox); + pbr = new Model("models/sphereMetal.gltf", *pbrProg, *skybox); - albedoMap = loadTexture("models/darktiles/darktiles1_basecolor.png"); - metallicMap = loadTexture("models/darktiles/darktiles1_metallic.png"); - normalMap = loadTexture("models/darktiles/darktiles1_normal.png"); - roughnessMap = loadTexture("models/darktiles/darktiles1_roughness.png"); - aoMap = loadTexture("models/darktiles/darktiles1_AO.png"); + /* albedoMap = loadTexture("models/materials/streakedmetal/streakedmetal-albedo.png"); */ + /* metallicMap = loadTexture("models/materials/streakedmetal/streakedmetal-metalness.png"); */ + /* normalMap = loadTexture("models/materials/streakedmetal/streakedmetal-normal.png"); */ + /* roughnessMap = loadTexture("models/materials/streakedmetal/streakedmetal-roughness.png"); */ + /* aoMap = loadTexture("models/materials/streakedmetal/streakedmetal-ao.png"); */ glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); + // prevent edge artifacts in specular cubemaps + glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); } bool* keyStates = new bool[256]; @@ -315,13 +326,15 @@ int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGB|GLUT_3_2_CORE_PROFILE); glutInitWindowSize(WIDTH, HEIGHT); - int win = glutCreateWindow("Hello Triangle"); + int win = glutCreateWindow("Physically Based Rendering"); glutDisplayFunc(display); glewInit(); init(); + swizzle(); + glutKeyboardFunc(keyboard); glutKeyboardUpFunc(keyboardUp); glutTimerFunc(16, timer, 0);