From: Luke Lau Date: Sun, 9 Feb 2020 21:59:01 +0000 (+0000) Subject: Get stuff building again X-Git-Tag: cs7gv3-a3~9 X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=commitdiff_plain;h=99d2b81ce5567869469fe2e55722cc212370c7db Get stuff building again --- diff --git a/Makefile b/Makefile index 05d7b83..42ebf39 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ all: bin/main +CXX_FLAGS := -g --std=c++17 + bin/main: model.o material.o image.o skybox.o program.o main.cpp - clang++ -g --std=c++17 $^ -I../assimp/include -L../assimp/lib -lassimp \ + clang++ $(CXX_FLAGS) $^ \ -I/usr/local/include -L/usr/local/lib \ + -lassimp \ -framework OpenGL -framework glut -framework CoreGraphics -framework CoreFoundation -framework ImageIO -lglew -o $@ ctags *.cpp %.o: %.cpp - clang++ -g --std=c++17 -I/usr/local/include -c $< -o $@ + clang++ $(CXX_FLAGS) -I/usr/local/include -c $< -o $@ diff --git a/image.cpp b/image.cpp index 6c09fa3..02fd60b 100644 --- a/image.cpp +++ b/image.cpp @@ -10,9 +10,15 @@ Image::Image(const std::string &path) { CGImageRelease(ref); } -Image::Image(const unsigned char *data, size_t length) { +Image::Image(const unsigned char *data, size_t length, const char *formatHint) { CGDataProviderRef dpRef = CGDataProviderCreateWithData(NULL, data, length, NULL); - CGImageRef ref = CGImageCreateWithJPEGDataProvider(dpRef, NULL, false, kCGRenderingIntentDefault); + CGImageRef ref; + if (strcmp("png", formatHint) == 0) + ref = CGImageCreateWithPNGDataProvider(dpRef, NULL, false, kCGRenderingIntentDefault); + else if (strcmp("jpg", formatHint) == 0) + ref = CGImageCreateWithJPEGDataProvider(dpRef, NULL, false, kCGRenderingIntentDefault); + else + abort(); initWithImageRef(ref); CGImageRelease(ref); } diff --git a/image.hpp b/image.hpp index 6864553..5a75b0d 100644 --- a/image.hpp +++ b/image.hpp @@ -11,7 +11,7 @@ class Image { public: Image(const std::string &path); - Image(const unsigned char *data, size_t length); + Image(const unsigned char *data, size_t length, const char *formatHint); ~Image(); unsigned char *data() const; GLfloat width() const; diff --git a/material.cpp b/material.cpp index c059226..32bf9e0 100644 --- a/material.cpp +++ b/material.cpp @@ -1,5 +1,6 @@ #include "material.hpp" #include "image.hpp" +#include Material::Material(const aiMaterial &ai, const aiScene &scene, GLuint progId): progId(progId) { aiString name; @@ -17,11 +18,15 @@ Material::Material(const aiMaterial &ai, const aiScene &scene, GLuint progId): p normal = new Texture(path, scene); path = ""; - ai.GetTexture(AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLICROUGHNESS_TEXTURE, 0, &path); + ai.GetTexture(AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLICROUGHNESS_TEXTURE, &path); metallicRoughness = new Texture(path, scene); path = ""; ai.GetTexture(aiTextureType_LIGHTMAP, 0, &path); + if (path == aiString("")) { + fprintf(stderr, "Material %s does not have an AO map", name.C_Str()); + abort(); + } ambientOcclusion = new Texture(path, scene); } @@ -36,7 +41,7 @@ Material::Texture::Texture(const aiString fileName, const aiScene &scene) { int embIdx = atoi(&fileName.data[1]); aiTexture *texture = scene.mTextures[embIdx]; if (texture->mHeight == 0) { - Image img((unsigned char*)texture->pcData, texture->mWidth); + Image img((unsigned char*)texture->pcData, texture->mWidth, texture->achFormatHint); glTexImage2D(GL_TEXTURE_2D, 0, img.internalFormat(), img.width(), img.height(), 0, img.format(), img.type(), img.data()); } else { fprintf(stderr, "TODO: handle uncompressed embedded textures"); diff --git a/models/newtonsCradle.blend b/models/newtonsCradle.blend index 28b9c28..f26a498 100644 Binary files a/models/newtonsCradle.blend and b/models/newtonsCradle.blend differ