1 /* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ 2 3 #ifndef GEOMETRYBUFFER_H 4 #define GEOMETRYBUFFER_H 5 6 #include "Rendering/GL/FBO.h" 7 #include "System/type2.h" 8 9 namespace GL { 10 struct GeometryBuffer { 11 public: 12 enum { 13 ATTACHMENT_NORMTEX = 0, // shading (not geometric) normals 14 ATTACHMENT_DIFFTEX = 1, // diffuse texture fragments 15 ATTACHMENT_SPECTEX = 2, // specular texture fragments 16 ATTACHMENT_EMITTEX = 3, // emissive texture fragments 17 ATTACHMENT_MISCTEX = 4, // custom data for Lua UnitRendering shaders 18 ATTACHMENT_ZVALTEX = 5, // fragment depth-values (must be last) 19 ATTACHMENT_COUNT = 6, 20 }; 21 GeometryBufferGeometryBuffer22 GeometryBuffer() : bufferName(NULL) { Init(); } ~GeometryBufferGeometryBuffer23 ~GeometryBuffer() { Kill(); } 24 25 void Init(); 26 void Kill(); 27 28 void DetachTextures(const bool init); 29 void DrawDebug(unsigned int texID); SetNameGeometryBuffer30 void SetName(const char* name) { bufferName = name; } 31 HasAttachmentsGeometryBuffer32 bool HasAttachments() const { return (bufferTextureIDs[0] != 0); } ValidGeometryBuffer33 bool Valid() const { return (buffer.IsValid()); } 34 bool Create(const int2 size); 35 bool Update(const bool init); 36 GetBufferTextureGeometryBuffer37 GLuint GetBufferTexture(unsigned int idx) const { return bufferTextureIDs[idx]; } GetBufferAttachmentGeometryBuffer38 GLuint GetBufferAttachment(unsigned int idx) const { return bufferAttachments[idx]; } 39 GetObjectGeometryBuffer40 const FBO& GetObject() const { return buffer; } GetObjectGeometryBuffer41 FBO& GetObject() { return buffer; } 42 BindGeometryBuffer43 void Bind() { buffer.Bind(); } UnBindGeometryBuffer44 void UnBind() { buffer.Unbind(); } 45 GetCurrSizeGeometryBuffer46 int2 GetCurrSize() const { return currBufferSize; } GetPrevSizeGeometryBuffer47 int2 GetPrevSize() const { return prevBufferSize; } 48 49 int2 GetWantedSize(bool allowed) const; 50 51 private: 52 FBO buffer; 53 54 GLuint bufferTextureIDs[ATTACHMENT_COUNT]; 55 GLenum bufferAttachments[ATTACHMENT_COUNT]; 56 57 int2 prevBufferSize; 58 int2 currBufferSize; 59 60 const char* bufferName; 61 }; 62 } 63 64 #endif 65 66