Skybox
[opengl.git] / image.cpp
diff --git a/image.cpp b/image.cpp
new file mode 100644 (file)
index 0000000..71114b0
--- /dev/null
+++ b/image.cpp
@@ -0,0 +1,31 @@
+#include "image.hpp"
+
+Image::Image(const std::string &path) {
+       auto provider = CGDataProviderCreateWithFilename(path.c_str());
+       std::ifstream file(path);
+       long magic;
+       file.read((char*)&magic, 8);
+       file.close();
+
+       CGImageRef ref;
+
+       if (magic == 0x0a1a0a0d474e5089) // png magic number
+               ref = CGImageCreateWithPNGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
+       else
+               ref = CGImageCreateWithJPEGDataProvider(provider, nullptr, false, kCGRenderingIntentDefault);
+
+       _width = CGImageGetWidth(ref), _height = CGImageGetHeight(ref);
+
+       dataRef = CGDataProviderCopyData(CGImageGetDataProvider(ref));
+       CGImageRelease(ref);
+
+}
+
+unsigned char *Image::data() {
+       return (unsigned char*) CFDataGetBytePtr(dataRef);
+}
+
+GLfloat Image::width() const { return _width; }
+GLfloat Image::height() const { return _height; }
+
+Image::~Image() { CFRelease(dataRef); }