ultimatepp/uppsrc/GLDraw/GLDraw.cpp
cxl c7671fcfda ide: .rc now has some defines (thanks wimpie)
git-svn-id: svn://ultimatepp.org/upp/trunk@6462 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2013-10-21 17:52:19 +00:00

130 lines
No EOL
2.8 KiB
C++

#include "GLDraw.h"
#define LTIMING(x) RTIMING(x)
#ifndef GL_USE_SHADERS
#define LLOG(x) // LOG(x)
namespace Upp {
void GLDraw::PutImage(Point p, const Image& img, const Rect& src)
{
LTIMING("PutImage");
if(img.GetLength() == 0)
return;
LLOG("PutImage " << img.GetSerialId() << ' ' << p.x << ", " << p.y << ", "<< img.GetSize());
LLOG("SysImage cache pixels " << sTextureCache.GetSize() << ", count " << sTextureCache.GetCount());
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, GetTextureForImage(img));
if(src == img.GetSize()) {
Rect r(p, img.GetSize());
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0f, 1.0f, 1.0f);
glTexCoord2f(0, 0);
glVertex2i(r.left, r.top);
glTexCoord2f(1, 0);
glVertex2i(r.right, r.top);
glTexCoord2f(0, 1);
glVertex2i(r.left, r.bottom);
glTexCoord2f(1, 1);
glVertex2i(r.right, r.bottom);
glEnd();
}
else {
Sizef iszf = img.GetSize();
Rect s = src & img.GetSize();
Rect r(p, s.GetSize());
Rectf h;
h.left = (double)s.left / iszf.cx;
h.right = (double)s.right / iszf.cx;
h.top = (double)s.top / iszf.cy;
h.bottom = (double)s.bottom / iszf.cy;
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0f, 1.0f, 1.0f);
glTexCoord2f(h.left, h.top);
glVertex2i(r.left, r.top);
glTexCoord2f(h.right, h.top);
glVertex2i(r.right, r.top);
glTexCoord2f(h.left, h.bottom);
glVertex2i(r.left, r.bottom);
glTexCoord2f(h.right, h.bottom);
glVertex2i(r.right, r.bottom);
glEnd();
}
glDisable(GL_TEXTURE_2D);
}
void GLDraw::SetColor(Color c)
{
glColor3f(c.GetR() / 255.0, c.GetG() / 255.0, c.GetB() / 255.0);
}
void GLDraw::PutRect(const Rect& r, Color color)
{
LTIMING("PutRect");
LLOG("PutRect " << r << " " << color);
bool inv = color == InvertColor();
if(inv)
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
glBegin(GL_TRIANGLE_STRIP);
if(inv)
glColor3f(1.0f, 1.0f, 1.0f);
else
SetColor(color);
glVertex2i(r.left, r.top);
glVertex2i(r.right, r.top);
glVertex2i(r.left, r.bottom);
glVertex2i(r.right, r.bottom);
glEnd();
if(inv)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
void GLDraw::Init(Size sz, uint64 context_)
{
context = context_;
SDraw::Init(sz);
glEnable(GL_BLEND);
glViewport(0, 0, (GLsizei)sz.cx, (GLsizei)sz.cy);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, sz.cx, sz.cy, 0, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
LOG("==============================================================================");
/*
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, triangleVBO);
glGenBuffers(1, &tbo);
glBindBuffer(GL_
*/
}
void GLDraw::Finish()
{
}
GLDraw::~GLDraw()
{
}
}
#endif