WIP: Renderer
This commit is contained in:
4
Makefile
4
Makefile
@@ -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
13
render/GlResource.cc
Normal 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
71
render/GlResource.hh
Normal 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
12
render/Renderer.cc
Normal 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
14
render/Renderer.hh
Normal 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
|
||||
Reference in New Issue
Block a user