WIP: Renderer

This commit is contained in:
2015-04-29 16:45:10 +02:00
parent 202c309b2a
commit c317918618
5 changed files with 113 additions and 1 deletions

View File

@@ -2,6 +2,8 @@ CXX=g++
CXXOPTS=-Og -ggdb -fvar-tracking-assignments -Wall -Wextra -pedantic -std=c++14 -march=native -fstack-protector-strong --param=ssp-buffer-size=4 -flto
LDOPTS=-Wl,--sort-common,--as-needed
render_CXXSRCS ::= render/Renderer.cc render/GlResource.cc
iffexplore_CXXSRCS ::= iffexplore.cc IffFile.cc util.cc exceptions.cc
iffexplore_LIBS ::=
@@ -11,7 +13,7 @@ treexplore_LIBS ::=
font2png_CXXSRCS ::= font2png.cc
font2png_LIBS ::= -lpng
mvedecode_CXXSRCS ::= mvedecode.cc TreFile.cc IffFile.cc util.cc MveDecoder.cc exceptions.cc decompress.cc
mvedecode_CXXSRCS ::= mvedecode.cc TreFile.cc IffFile.cc util.cc MveDecoder.cc exceptions.cc decompress.cc $(render_CXXSRCS)
mvedecode_LIBS ::= -lSDL2
progs ::= iffexplore treexplore mvedecode

13
render/GlResource.cc Normal file
View File

@@ -0,0 +1,13 @@
#include <glbinding/gl/gl.h>
#include "GlResource.hh"
using namespace gl;
void TextureDeleter::operator()(gl::GLuint tex) const {
glDeleteTextures(1, &tex);
}
void TextureDeleter::operator() (gl::GLsizei count, gl::GLuint tex[]) const {
glDeleteTextures(count, tex);
}

71
render/GlResource.hh Normal file
View File

@@ -0,0 +1,71 @@
#ifndef WC3RE_RENDER_GLRESOURCE_HH__
#define WC3RE_RENDER_GLRESOURCE_HH__
#include <glbinding/gl/types.h>
struct TextureDeleter {
void operator() (gl::GLuint tex) const;
void operator() (gl::GLsizei count, gl::GLuint tex[]) const;
};
struct FramebufferDeleter {
void operator() (gl::GLuint tex) const;
};
struct ShaderDeleter {
void operator() (gl::GLuint tex) const;
};
struct ProgramDeleter {
void operator() (gl::GLuint tex) const;
};
struct VertexArrayDeleter {
void operator() (gl::GLuint tex) const;
};
struct BufferDeleter {
void operator() (gl::GLuint tex) const;
};
template<class Deleter, class Handle = gl::GLuint>
class GlResource {
public:
GlResource()
: handle_() {
}
GlResource(Handle handle)
: handle_(handle) {
}
~GlResource() {
if (handle_)
Deleter()(handle_);
handle_ = Handle();
}
operator Handle() const {
return handle_;
}
Handle& get() {
return handle_;
}
Handle const& get() const {
return handle_;
}
private:
Handle handle_;
};
using TextureResource = GlResource<TextureDeleter>;
using FramebufferResource = GlResource<FramebufferDeleter>;
using ShaderResource = GlResource<ShaderDeleter>;
using ProgramResource = GlResource<ProgramDeleter>;
using VertexArrayResource = GlResource<VertexArrayDeleter>;
using BufferResource = GlResource<BufferDeleter>;
#endif

12
render/Renderer.cc Normal file
View File

@@ -0,0 +1,12 @@
#include <glbinding/gl/gl.h>
#include "Renderer.hh"
#include "GlResource.hh"
using namespace gl;
Renderer::Renderer()
{
TextureResource testTex;
glGenTextures(1, &testTex.get());
}

14
render/Renderer.hh Normal file
View File

@@ -0,0 +1,14 @@
#ifndef WC3RE_RENDER_RENDERER_HH__
#define WC3RE_RENDER_RENDERER_HH__
#include <SDL2/SDL.h>
class Renderer {
public:
Renderer();
private:
SDL_Window *win;
};
#endif