many graphics performance tweaks

* use hardware vertex buffers (video memory)
* cache text drawing with vertex buffers instead of framebuffers
* avoid recalculating texture transformation matrix
This commit is contained in:
Eduardo Bart
2012-03-20 16:10:04 -03:00
parent b4261a8c7b
commit 5c35938a92
20 changed files with 180 additions and 155 deletions

View File

@@ -24,33 +24,53 @@
#define COORDSBUFFER_H
#include "vertexarray.h"
#include "hardwarebuffer.h"
class CoordsBuffer
{
public:
void clear();
CoordsBuffer();
~CoordsBuffer();
void clear() {
m_textureVertexBuffer.clear();
m_vertexBuffer.clear();
m_hardwareCached = false;
}
void addRect(const Rect& dest) {
m_vertexBuffer.addRect(dest);
m_hardwareCached = false;
}
void addRect(const Rect& dest, const Rect& src) {
m_vertexBuffer.addRect(dest);
m_textureVertexBuffer.addRect(src);
m_hardwareCached = false;
}
// no texture
void addRect(const Rect& dest);
void addBoudingRect(const Rect& dest, int innerLineWidth);
// textured
void addRect(const Rect& dest, const Rect& src);
void addRepeatedRects(const Rect& dest, const Rect& src);
void cacheVertexArrays();
void enableHardwareCaching(HardwareBuffer::UsagePattern usagePattern = HardwareBuffer::DynamicDraw);
void updateCaches();
bool isHardwareCached() { return m_hardwareCached; }
float *getVertices() const { return m_vertices.vertices(); }
float *getTextureCoords() const { return m_textureCoords.vertices(); }
int getVertexCount() const { return m_vertices.vertexCount(); }
int getTextureCoordsCount() const { return m_textureCoords.vertexCount(); }
float *getVertexBuffer() const { return m_vertexBuffer.vertices(); }
float *getTextureVertexBuffer() const { return m_textureVertexBuffer.vertices(); }
int getVertexCount() const { return m_vertexBuffer.vertexCount(); }
int getTextureVertexCount() const { return m_textureVertexBuffer.vertexCount(); }
HardwareBuffer *getHardwareVertexBuffer() { return m_hardwareVertexBuffer; }
HardwareBuffer *getHardwareTextureVertexBuffer() { return m_hardwareTextureVertexBuffer; }
private:
DataBuffer<Rect> m_destRects;
DataBuffer<Rect> m_srcRects;
VertexArray m_vertices;
VertexArray m_textureCoords;
Boolean<true> m_updateCache;
HardwareBuffer *m_hardwareVertexBuffer;
HardwareBuffer *m_hardwareTextureVertexBuffer;
HardwareBuffer::UsagePattern m_hardwareCacheMode;
VertexArray m_vertexBuffer;
VertexArray m_textureVertexBuffer;
bool m_hardwareCached;
bool m_hardwareCaching;
};
#endif