File: texture_gl.h

package info (click to toggle)
megaglest 3.12.0-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 12,904 kB
  • ctags: 18,215
  • sloc: cpp: 144,232; ansic: 11,860; sh: 2,949; perl: 1,899; python: 1,751; objc: 142; asm: 42; makefile: 24
file content (131 lines) | stat: -rw-r--r-- 3,884 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// ==============================================================
//	This file is part of Glest Shared Library (www.glest.org)
//
//	Copyright (C) 2001-2008 MartiƱo Figueroa
//
//	You can redistribute this code and/or modify it under 
//	the terms of the GNU General Public License as published 
//	by the Free Software Foundation; either version 2 of the 
//	License, or (at your option) any later version
// ==============================================================

#ifndef _SHARED_GRAPHICS_GL_TEXTUREGL_H_
#define _SHARED_GRAPHICS_GL_TEXTUREGL_H_

#include "texture.h"
#include "opengl.h"
#include "leak_dumper.h"

namespace Shared{ namespace Graphics{ namespace Gl{

// =====================================================
//	class TextureGl
// =====================================================

class TextureGl {
protected:
	GLuint handle;
	GLuint renderBufferId;
	GLuint frameBufferId;

	static bool enableATIHacks;

	void initRenderBuffer();
	void initFrameBuffer();
	void attachRenderBuffer();

public:
	TextureGl();
	virtual ~TextureGl();

	static void setEnableATIHacks(bool value) 	{ enableATIHacks = value; }
	static bool getEnableATIHacks() 			{ return enableATIHacks; }

	GLuint getHandle() const				{return handle;}
	GLuint getRenderBufferHandle() const	{return renderBufferId;}
	GLuint getFrameBufferHandle() const		{return frameBufferId;}

	bool supports_FBO_RBO();
	void setup_FBO_RBO();
	void attachFrameBufferToTexture();
	void dettachFrameBufferFromTexture();
	void dettachRenderBufferFromTexture();
	bool checkFrameBufferStatus();
	void teardown_FBO_RBO();

	virtual int getTextureWidth() const  = 0;
	virtual int getTextureHeight() const = 0;

	void OutputTextureDebugInfo(Texture::Format format, int components, const string path,std::size_t rawSize,GLenum texType);
};

// =====================================================
//	class Texture1DGl
// =====================================================

class Texture1DGl: public Texture1D, public TextureGl {
public:
	Texture1DGl();
	virtual ~Texture1DGl();

	virtual void init(Filter filter, int maxAnisotropy= 1);
	virtual void end(bool deletePixelBuffer=true);

	virtual int getTextureWidth() const  { return Texture1D::getTextureWidth();}
	virtual int getTextureHeight() const { return Texture1D::getTextureHeight();}
};

// =====================================================
//	class Texture2DGl
// =====================================================

class Texture2DGl: public Texture2D, public TextureGl{
public:
	Texture2DGl();
	virtual ~Texture2DGl();

	virtual void init(Filter filter, int maxAnisotropy= 1);
	virtual void end(bool deletePixelBuffer=true);

	virtual int getTextureWidth() const  { return Texture2D::getTextureWidth();}
	virtual int getTextureHeight() const { return Texture2D::getTextureHeight();}
};

// =====================================================
//	class Texture3DGl
// =====================================================

class Texture3DGl: public Texture3D, public TextureGl{
public:

	Texture3DGl();
	virtual ~Texture3DGl();

	virtual void init(Filter filter, int maxAnisotropy= 1);
	virtual void end(bool deletePixelBuffer=true);

	virtual int getTextureWidth() const  { return Texture3D::getTextureWidth();}
	virtual int getTextureHeight() const { return Texture3D::getTextureHeight();}
};

// =====================================================
//	class TextureCubeGl
// =====================================================

class TextureCubeGl: public TextureCube, public TextureGl{
public:

	TextureCubeGl();
	virtual ~TextureCubeGl();

	virtual void init(Filter filter, int maxAnisotropy= 1);
	virtual void end(bool deletePixelBuffer=true);

	virtual int getTextureWidth() const  { return TextureCube::getTextureWidth();}
	virtual int getTextureHeight() const { return TextureCube::getTextureHeight();}

};

}}}//end namespace

#endif