mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
130 lines
No EOL
2.8 KiB
C++
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 |