mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
189 lines
3.7 KiB
C++
189 lines
3.7 KiB
C++
#if defined(flagWINGL) || defined(flagLINUXGL)
|
|
|
|
#include <CtrlCore/CtrlCore.h>
|
|
|
|
NAMESPACE_UPP
|
|
|
|
#define LLOG(x) // LOG(x)
|
|
#define LTIMING(x) // RTIMING(x)
|
|
|
|
FrameInfo frameInfo;
|
|
SystemDraw* SystemDraw::systemDraw = NULL;
|
|
float SystemDraw::blurStrength = 0;
|
|
float SystemDraw::grayStrength = 0;
|
|
|
|
dword SystemDraw::GetInfo() const
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
Size SystemDraw::GetPageSize() const
|
|
{
|
|
return Size(0, 0);
|
|
}
|
|
|
|
Size SystemDraw::GetNativeDpi() const
|
|
{
|
|
return Size(96, 96);
|
|
}
|
|
|
|
void SystemDraw::BeginNative()
|
|
{
|
|
}
|
|
|
|
void SystemDraw::EndNative()
|
|
{
|
|
}
|
|
|
|
int SystemDraw::GetCloffLevel() const
|
|
{
|
|
return ci;
|
|
}
|
|
|
|
void SystemDraw::InitClip(const Rect& clip)
|
|
{
|
|
GuiLock __;
|
|
drawing_clip = clip;
|
|
}
|
|
|
|
void SystemDraw::Reset() {
|
|
systemDraw = this;
|
|
cloff.SetCount(32);
|
|
mstack.SetCount(32);
|
|
ci = 0;
|
|
cn = 0;
|
|
cd = 0;
|
|
mi = 0;
|
|
drawing_offset = Point(0, 0);
|
|
alpha = 255;
|
|
r = g = b = a = 255;
|
|
angle = 0;
|
|
scale = 1;
|
|
image_coloring = true;
|
|
projection_mode = 0;
|
|
}
|
|
|
|
SystemDraw::SystemDraw() {
|
|
GuiLock __;
|
|
Reset();
|
|
}
|
|
|
|
SystemDraw::SystemDraw(Size sz) {
|
|
GuiLock __;
|
|
Reset();
|
|
drawing_clip = sz;
|
|
drawing_size = sz;
|
|
clip = sz;
|
|
Init();
|
|
}
|
|
|
|
void SystemDraw::Init()
|
|
{
|
|
//glVertexPointer(2, GL_FLOAT, 0, vtx);
|
|
//glTexCoordPointer(2, GL_FLOAT, 0, crd);
|
|
glEnable(GL_BLEND);
|
|
glDisable(GL_DEPTH_TEST);
|
|
glShadeModel(GL_SMOOTH);
|
|
glDisable(GL_ALPHA_TEST);
|
|
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
|
#if CLIP_MODE == 0
|
|
glEnable(GL_SCISSOR_TEST);
|
|
#elif CLIP_MODE == 1
|
|
glEnable(GL_CLIP_PLANE0);
|
|
glEnable(GL_CLIP_PLANE1);
|
|
glEnable(GL_CLIP_PLANE2);
|
|
glEnable(GL_CLIP_PLANE3);
|
|
#elif CLIP_MODE == 2
|
|
glEnable(GL_STENCIL_TEST);
|
|
glStencilFunc(GL_ALWAYS, 0, ~0);
|
|
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
|
glClearStencil(0);
|
|
#endif
|
|
glEnable(GL_LINE_SMOOTH);
|
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
glClearColor(0.f, 0.f, 0.f, 1.f);
|
|
glClearDepth(1.0f);
|
|
glEnableClientState(GL_VERTEX_ARRAY);
|
|
//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
glColor4f(1.f, 1.f, 1.f, 1.f);
|
|
}
|
|
|
|
void SystemDraw::Clear(bool ontransforms)
|
|
{
|
|
GuiLock __;
|
|
if(ontransforms && (angle == 0 && scale == 1))
|
|
return;
|
|
#if CLIP_MODE == 0
|
|
glDisable(GL_SCISSOR_TEST);
|
|
#endif
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
|
#if CLIP_MODE == 0
|
|
glEnable(GL_SCISSOR_TEST);
|
|
#endif
|
|
}
|
|
|
|
void SystemDraw::ViewPort(int width, int height)
|
|
{
|
|
GuiLock __;
|
|
glViewport(0, 0, (GLsizei) width < 0 ? drawing_size.cx : width, (GLsizei) height < 0 ? drawing_size.cy : height);
|
|
}
|
|
|
|
void SystemDraw::OrthogonalView(bool clear_modelview)
|
|
{
|
|
GuiLock __;
|
|
glMatrixMode(GL_PROJECTION);
|
|
glLoadIdentity();
|
|
glOrtho(0, drawing_size.cx, drawing_size.cy, 0, -100, 100);
|
|
glMatrixMode(GL_MODELVIEW);
|
|
if(clear_modelview)
|
|
glLoadIdentity();
|
|
}
|
|
|
|
void SystemDraw::PerspectiveView(bool clear_modelview)
|
|
{
|
|
GuiLock __;
|
|
glMatrixMode(GL_PROJECTION);
|
|
glLoadIdentity();
|
|
gluPerspective(45.0f, GetAspect(), 1.f, 100.0f);
|
|
glMatrixMode(GL_MODELVIEW);
|
|
if(clear_modelview)
|
|
glLoadIdentity();
|
|
}
|
|
|
|
void SystemDraw::ApplyTransforms()
|
|
{
|
|
GuiLock __;
|
|
float dx = (float) drawing_size.cx / 2;
|
|
float dy = (float) drawing_size.cy / 2;
|
|
glTranslatef(dx, dy, 0.f);
|
|
glRotatef(angle, 0, 0, 1);
|
|
glScalef(scale, scale, 1);
|
|
glTranslatef(-dx, -dy, 0.f);
|
|
}
|
|
|
|
void SystemDraw::PushContext()
|
|
{
|
|
GuiLock __;
|
|
MatrixStack& m = mstack[mi++];
|
|
glGetDoublev(GL_PROJECTION_MATRIX, m.projection_matrix);
|
|
glGetDoublev(GL_MODELVIEW_MATRIX, m.modelview_matrix);
|
|
m.projection_mode = projection_mode;
|
|
}
|
|
|
|
void SystemDraw::PopContext()
|
|
{
|
|
GuiLock __;
|
|
MatrixStack& m = mstack[--mi];
|
|
glMatrixMode(GL_PROJECTION);
|
|
glLoadMatrixd(m.projection_matrix);
|
|
glMatrixMode(GL_MODELVIEW);
|
|
glLoadMatrixd(m.modelview_matrix);
|
|
projection_mode = m.projection_mode;
|
|
}
|
|
|
|
SystemDraw::~SystemDraw() {
|
|
}
|
|
|
|
END_UPP_NAMESPACE
|
|
|
|
#endif
|