mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
Rainbow: WinGL..
git-svn-id: svn://ultimatepp.org/upp/trunk@3604 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
329ff7c06c
commit
c2506b0aac
8 changed files with 359 additions and 68 deletions
|
|
@ -30,4 +30,5 @@ public:
|
|||
static Ctrl *GetDesktop() { return desktop; }
|
||||
static void SetWindowSize(Size sz);
|
||||
|
||||
static void DrawScreen();
|
||||
//$ };
|
||||
|
|
|
|||
|
|
@ -96,29 +96,278 @@ ImageDraw::ImageDraw(int cx, int cy)
|
|||
{
|
||||
has_alpha = false;
|
||||
}
|
||||
/*
|
||||
|
||||
#define IMAGECLASS FBImg
|
||||
#define IMAGEFILE <Framebuffer/FB.iml>
|
||||
void Image::SetCursorCheat(LPCSTR id)
|
||||
{
|
||||
data->Sys().cursor_cheat = id;
|
||||
}
|
||||
|
||||
LPCSTR Image::GetCursorCheat() const
|
||||
{
|
||||
return data ? data->Sys().cursor_cheat : NULL;
|
||||
}
|
||||
|
||||
Image::Data::SystemData& Image::Data::Sys() const
|
||||
{
|
||||
ASSERT(sizeof(system_buffer) >= sizeof(SystemData));
|
||||
return *(SystemData *)system_buffer;
|
||||
}
|
||||
|
||||
class BitmapInfo32__ {
|
||||
Buffer<byte> data;
|
||||
|
||||
public:
|
||||
operator BITMAPINFO *() { return (BITMAPINFO *)~data; }
|
||||
operator BITMAPINFOHEADER *() { return (BITMAPINFOHEADER *)~data; }
|
||||
BITMAPINFOHEADER *operator->() { return (BITMAPINFOHEADER *)~data; }
|
||||
|
||||
BitmapInfo32__(int cx, int cy);
|
||||
};
|
||||
|
||||
BitmapInfo32__::BitmapInfo32__(int cx, int cy)
|
||||
{
|
||||
data.Alloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256);
|
||||
BITMAPINFOHEADER *hi = (BITMAPINFOHEADER *) ~data;;
|
||||
memset(hi, 0, sizeof(BITMAPINFOHEADER));
|
||||
hi->biSize = sizeof(BITMAPINFOHEADER);
|
||||
hi->biPlanes = 1;
|
||||
#ifdef PLATFORM_WINCE
|
||||
hi->biBitCount = 32;
|
||||
hi->biCompression = BI_BITFIELDS;
|
||||
dword *x = (dword *)(~data + sizeof(BITMAPINFOHEADER));
|
||||
x[2] = 0xff;
|
||||
x[1] = 0xff00;
|
||||
x[0] = 0xff0000;
|
||||
#else
|
||||
hi->biBitCount = 32;
|
||||
hi->biCompression = BI_RGB;
|
||||
#endif
|
||||
hi->biSizeImage = 0;
|
||||
hi->biClrUsed = 0;
|
||||
hi->biClrImportant = 0;
|
||||
hi->biWidth = cx;
|
||||
hi->biHeight = -cy;
|
||||
}
|
||||
|
||||
static Image sWin32Icon(HICON icon, bool cursor)
|
||||
{
|
||||
GuiLock __;
|
||||
ICONINFO iconinfo;
|
||||
if(!icon || !GetIconInfo(icon, &iconinfo))
|
||||
return Image();
|
||||
BITMAP bm;
|
||||
::GetObject((HGDIOBJ)iconinfo.hbmMask, sizeof(BITMAP), (LPVOID)&bm);
|
||||
HDC dcMem = ::CreateCompatibleDC(NULL);
|
||||
Size sz(bm.bmWidth, bm.bmHeight);
|
||||
BitmapInfo32__ bi(sz.cx, sz.cy);
|
||||
int len = sz.cx * sz.cy;
|
||||
Buffer<RGBA> mask(len);
|
||||
::SelectObject(dcMem, iconinfo.hbmColor);
|
||||
::GetDIBits(dcMem, iconinfo.hbmMask, 0, sz.cy, ~mask, bi, DIB_RGB_COLORS);
|
||||
ImageBuffer b(sz.cx, iconinfo.hbmColor ? sz.cy : sz.cy / 2);
|
||||
b.SetHotSpot(Point(iconinfo.xHotspot, iconinfo.yHotspot));
|
||||
if(iconinfo.hbmColor) {
|
||||
::SelectObject(dcMem, iconinfo.hbmColor);
|
||||
::GetDIBits(dcMem, iconinfo.hbmColor, 0, sz.cy, ~b, bi, DIB_RGB_COLORS);
|
||||
RGBA *s = ~b;
|
||||
RGBA *e = s + len;
|
||||
RGBA *m = mask;
|
||||
while(s < e) {
|
||||
if(s->a != 255 && s->a != 0) {
|
||||
Premultiply(b);
|
||||
goto alpha;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
s = ~b;
|
||||
while(s < e) {
|
||||
s->a = m->r ? 0 : 255;
|
||||
s++;
|
||||
m++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
len /= 2;
|
||||
RGBA *s = ~b;
|
||||
RGBA *e = s + len;
|
||||
RGBA *c = mask + len;
|
||||
RGBA *m = mask;
|
||||
while(s < e) {
|
||||
s->a = (m->r & ~c->r) ? 0 : 255;
|
||||
s->r = s->g = s->b = (c->r & ~m->r) ? 255 : 0;
|
||||
s++;
|
||||
m++;
|
||||
c++;
|
||||
}
|
||||
}
|
||||
alpha:
|
||||
::DeleteDC(dcMem);
|
||||
::DeleteObject(iconinfo.hbmColor);
|
||||
::DeleteObject(iconinfo.hbmMask);
|
||||
Image img(b);
|
||||
::DestroyIcon(icon);
|
||||
return img;
|
||||
}
|
||||
|
||||
Image Win32IconCursor(LPCSTR id, int iconsize, bool cursor)
|
||||
{
|
||||
HICON icon;
|
||||
if(cursor)
|
||||
icon = (HICON)LoadCursor(0, id);
|
||||
else
|
||||
if(iconsize)
|
||||
icon = (HICON)LoadImage(GetModuleHandle(NULL), id,
|
||||
IMAGE_ICON, iconsize, iconsize, LR_DEFAULTCOLOR);
|
||||
else
|
||||
icon = LoadIcon(0, id);
|
||||
Image img = sWin32Icon(icon, cursor);
|
||||
if(cursor)
|
||||
img.SetCursorCheat(id);
|
||||
return img;
|
||||
}
|
||||
|
||||
Image Win32Icon(LPCSTR id, int iconsize)
|
||||
{
|
||||
return Win32IconCursor(id, iconsize, false);
|
||||
}
|
||||
|
||||
Image Win32Icon(int id, int iconsize)
|
||||
{
|
||||
return Win32Icon(MAKEINTRESOURCE(id), iconsize);
|
||||
}
|
||||
|
||||
Image Win32Cursor(LPCSTR id)
|
||||
{
|
||||
return Win32IconCursor(id, 0, true);
|
||||
}
|
||||
|
||||
Image Win32Cursor(int id)
|
||||
{
|
||||
return Win32Cursor(MAKEINTRESOURCE(id));
|
||||
}
|
||||
|
||||
HBITMAP CreateBitMask(const RGBA *data, Size sz, Size tsz, Size csz, RGBA *ct)
|
||||
{
|
||||
GuiLock __;
|
||||
memset(ct, 0, tsz.cx * tsz.cy * sizeof(RGBA));
|
||||
int linelen = (tsz.cx + 15) >> 4 << 1;
|
||||
Buffer<byte> mask(tsz.cy * linelen, 0xff);
|
||||
byte *m = mask;
|
||||
RGBA *ty = ct;
|
||||
const RGBA *sy = data;
|
||||
for(int y = 0; y < csz.cy; y++) {
|
||||
const RGBA *s = sy;
|
||||
RGBA *t = ty;
|
||||
for(int x = 0; x < csz.cx; x++) {
|
||||
if(s->a > 128) {
|
||||
*t = *s;
|
||||
m[x >> 3] &= ~(0x80 >> (x & 7));
|
||||
}
|
||||
else
|
||||
t->r = t->g = t->b = 0;
|
||||
t->a = 0;
|
||||
t++;
|
||||
s++;
|
||||
}
|
||||
m += linelen;
|
||||
sy += sz.cx;
|
||||
ty += tsz.cx;
|
||||
}
|
||||
return ::CreateBitmap(tsz.cx, tsz.cy, 1, 1, mask);
|
||||
}
|
||||
|
||||
HICON IconWin32(const Image& img, bool cursor)
|
||||
{
|
||||
GuiLock __;
|
||||
if(img.IsEmpty())
|
||||
return NULL;
|
||||
if(cursor) {
|
||||
LPCSTR id = img.GetCursorCheat();
|
||||
if(id)
|
||||
return (HICON)LoadCursor(0, id);
|
||||
}
|
||||
Size sz = img.GetSize();
|
||||
ICONINFO iconinfo;
|
||||
iconinfo.fIcon = !cursor;
|
||||
Point p = img.GetHotSpot();
|
||||
iconinfo.xHotspot = p.x;
|
||||
iconinfo.yHotspot = p.y;
|
||||
static Size cursor_size(GetSystemMetrics(SM_CXCURSOR), GetSystemMetrics(SM_CYCURSOR));
|
||||
Size tsz = sz;
|
||||
if(!IsWin2K() && cursor)
|
||||
tsz = cursor_size;
|
||||
Size csz = Size(min(tsz.cx, sz.cx), min(tsz.cy, sz.cy));
|
||||
if(IsWinXP() && !ImageFallBack) {
|
||||
RGBA *pixels;
|
||||
BitmapInfo32__ bi(tsz.cx, tsz.cy);
|
||||
HDC dcMem = ::CreateCompatibleDC(NULL);
|
||||
iconinfo.hbmColor = ::CreateDIBSection(dcMem, bi, DIB_RGB_COLORS, (void **)&pixels, NULL, 0);
|
||||
iconinfo.hbmMask = ::CreateBitmap(tsz.cx, tsz.cy, 1, 1, NULL);
|
||||
memset(pixels, 0, tsz.cx * tsz.cy * sizeof(RGBA));
|
||||
for(int y = 0; y < csz.cy; y++)
|
||||
memcpy(pixels + y * tsz.cx, img[y], csz.cx * sizeof(RGBA));
|
||||
::DeleteDC(dcMem);
|
||||
}
|
||||
else {
|
||||
Buffer<RGBA> h(tsz.cx * tsz.cy);
|
||||
HDC dc = ::GetDC(NULL);
|
||||
BitmapInfo32__ bi(tsz.cx, tsz.cy);
|
||||
iconinfo.hbmMask = CreateBitMask(~img, sz, tsz, csz, h);
|
||||
iconinfo.hbmColor = ::CreateDIBitmap(dc, bi, CBM_INIT, h, bi, DIB_RGB_COLORS);
|
||||
::ReleaseDC(NULL, dc);
|
||||
}
|
||||
|
||||
HICON icon = ::CreateIconIndirect(&iconinfo);
|
||||
::DeleteObject(iconinfo.hbmColor);
|
||||
::DeleteObject(iconinfo.hbmMask);
|
||||
return icon;
|
||||
}
|
||||
|
||||
#define WCURSOR_(x)\
|
||||
{ Image m; INTERLOCKED { static Image img = Win32Cursor(x); m = img; } return m; }
|
||||
|
||||
Image Image::Arrow() WCURSOR_(IDC_ARROW)
|
||||
Image Image::Wait() WCURSOR_(IDC_WAIT)
|
||||
Image Image::IBeam() WCURSOR_(IDC_IBEAM)
|
||||
Image Image::No() WCURSOR_(IDC_NO)
|
||||
Image Image::SizeAll() WCURSOR_(IDC_SIZEALL)
|
||||
Image Image::SizeHorz() WCURSOR_(IDC_SIZEWE)
|
||||
Image Image::SizeVert() WCURSOR_(IDC_SIZENS)
|
||||
Image Image::SizeTopLeft() WCURSOR_(IDC_SIZENWSE)
|
||||
Image Image::SizeTop() WCURSOR_(IDC_SIZENS)
|
||||
Image Image::SizeTopRight() WCURSOR_(IDC_SIZENESW)
|
||||
Image Image::SizeLeft() WCURSOR_(IDC_SIZEWE)
|
||||
Image Image::SizeRight() WCURSOR_(IDC_SIZEWE)
|
||||
Image Image::SizeBottomLeft() WCURSOR_(IDC_SIZENESW)
|
||||
Image Image::SizeBottom() WCURSOR_(IDC_SIZENS)
|
||||
Image Image::SizeBottomRight() WCURSOR_(IDC_SIZENWSE)
|
||||
Image Image::Cross() WCURSOR_(IDC_CROSS)
|
||||
Image Image::Hand() WCURSOR_(IDC_HAND)*/
|
||||
|
||||
|
||||
#define IMAGECLASS WinGlImg
|
||||
#define IMAGEFILE <WinGl/WinGl.iml>
|
||||
#include <Draw/iml_header.h>
|
||||
#define IMAGECLASS FBImg
|
||||
#define IMAGEFILE <Framebuffer/FB.iml>
|
||||
#define IMAGECLASS WinGlImg
|
||||
#define IMAGEFILE <WinGl/WinGl.iml>
|
||||
#include <Draw/iml_source.h>
|
||||
|
||||
Image Image::Arrow() { return FBImg::arrow(); }
|
||||
Image Image::Wait() { return FBImg::wait(); }
|
||||
Image Image::IBeam() { return FBImg::ibeam(); }
|
||||
Image Image::No() { return FBImg::no(); }
|
||||
Image Image::SizeAll() { return FBImg::sizeall(); }
|
||||
Image Image::SizeHorz() { return FBImg::sizehorz(); }
|
||||
Image Image::SizeVert() { return FBImg::sizevert(); }
|
||||
Image Image::SizeTopLeft() { return FBImg::sizetopleft(); }
|
||||
Image Image::SizeTop() { return FBImg::sizetop(); }
|
||||
Image Image::SizeTopRight() { return FBImg::sizetopright(); }
|
||||
Image Image::SizeLeft() { return FBImg::sizeleft(); }
|
||||
Image Image::SizeRight() { return FBImg::sizeright(); }
|
||||
Image Image::SizeBottomLeft() { return FBImg::sizebottomleft(); }
|
||||
Image Image::SizeBottom() { return FBImg::sizebottom(); }
|
||||
Image Image::SizeBottomRight() { return FBImg::sizebottomright(); }
|
||||
Image Image::Arrow() { return WinGlImg::arrow(); }
|
||||
Image Image::Wait() { return WinGlImg::wait(); }
|
||||
Image Image::IBeam() { return WinGlImg::ibeam(); }
|
||||
Image Image::No() { return WinGlImg::no(); }
|
||||
Image Image::SizeAll() { return WinGlImg::sizeall(); }
|
||||
Image Image::SizeHorz() { return WinGlImg::sizehorz(); }
|
||||
Image Image::SizeVert() { return WinGlImg::sizevert(); }
|
||||
Image Image::SizeTopLeft() { return WinGlImg::sizetopleft(); }
|
||||
Image Image::SizeTop() { return WinGlImg::sizetop(); }
|
||||
Image Image::SizeTopRight() { return WinGlImg::sizetopright(); }
|
||||
Image Image::SizeLeft() { return WinGlImg::sizeleft(); }
|
||||
Image Image::SizeRight() { return WinGlImg::sizeright(); }
|
||||
Image Image::SizeBottomLeft() { return WinGlImg::sizebottomleft(); }
|
||||
Image Image::SizeBottom() { return WinGlImg::sizebottom(); }
|
||||
Image Image::SizeBottomRight() { return WinGlImg::sizebottomright(); }
|
||||
|
||||
END_UPP_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -54,14 +54,6 @@ LRESULT CALLBACK glWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
#endif
|
||||
// LLOG("Ctrl::WindowProc(" << message << ") in " << ::Name(this) << ", focus " << (void *)::GetFocus());
|
||||
switch(message) {
|
||||
case WM_PAINT:
|
||||
ASSERT(hwnd);
|
||||
if(hwnd) {
|
||||
PAINTSTRUCT ps;
|
||||
HDC dc = BeginPaint(hwnd, &ps);
|
||||
EndPaint(hwnd, &ps);
|
||||
}
|
||||
return 0L;
|
||||
case WM_LBUTTONDOWN:
|
||||
Ctrl::DoMouseGl(Ctrl::LEFTDOWN, Point((dword)lParam));
|
||||
return 0L;
|
||||
|
|
@ -99,12 +91,12 @@ LRESULT CALLBACK glWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
Ctrl::DoMouseGl(Ctrl::MOUSEWHEEL, Point((dword)lParam) - p, (short)HIWORD(wParam));
|
||||
}
|
||||
return 0L;
|
||||
case WM_SETCURSOR:
|
||||
if(LOWORD((dword)lParam) == HTCLIENT) {
|
||||
/*case WM_SETCURSOR:
|
||||
if(LOWORD((dword)lParam) == HTCLIENT) {
|
||||
SetCursor(NULL);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
break;*/
|
||||
// case WM_MENUCHAR:
|
||||
// return MAKELONG(0, MNC_SELECT);
|
||||
case WM_KEYDOWN:
|
||||
|
|
@ -159,6 +151,7 @@ LRESULT CALLBACK glWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
case WM_ERASEBKGND:
|
||||
return 1L;
|
||||
case WM_SIZE:
|
||||
//ActivateGlContext();
|
||||
Ctrl::SetWindowSize(Size(LOWORD(lParam), HIWORD(lParam)));
|
||||
return 0L;
|
||||
case WM_MOVE:
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ extern void GuiMainFn_();
|
|||
|
||||
NAMESPACE_UPP
|
||||
|
||||
HWND glHWND;
|
||||
HWND hWnd;
|
||||
HWND glHwnd;
|
||||
HDC hDC;
|
||||
HGLRC hRC;
|
||||
|
||||
|
|
@ -41,24 +42,23 @@ void GlSleep(int ms)
|
|||
MsgWaitForMultipleObjects(0, NULL, FALSE, ms, QS_ALLINPUT);
|
||||
}
|
||||
|
||||
void ActivateGLContext()
|
||||
void ActivateGlContext()
|
||||
{
|
||||
if (hRC != NULL && wglGetCurrentContext() != hRC)
|
||||
if(hRC != NULL && wglGetCurrentContext() != hRC)
|
||||
wglMakeCurrent(hDC, hRC);
|
||||
}
|
||||
|
||||
void DestroyGL()
|
||||
void DestroyGl(bool destroyWindow)
|
||||
{
|
||||
if (hDC != NULL && hRC != NULL)
|
||||
{
|
||||
ActivateGLContext();
|
||||
wglMakeCurrent(NULL, NULL);
|
||||
}
|
||||
wglMakeCurrent(NULL, NULL);
|
||||
|
||||
if(hRC)
|
||||
wglDeleteContext(hRC);
|
||||
if(hDC)
|
||||
ReleaseDC(glHWND, hDC);
|
||||
::ReleaseDC(glHwnd, hDC);
|
||||
|
||||
if(destroyWindow)
|
||||
::DestroyWindow(glHwnd);
|
||||
}
|
||||
|
||||
int GlInit(HINSTANCE hInstance)
|
||||
|
|
@ -74,25 +74,26 @@ int GlInit(HINSTANCE hInstance)
|
|||
wc.hInstance = hInstance;
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)NULL;
|
||||
wc.lpszClassName = L"UPP-FB-CLASS";
|
||||
wc.lpszClassName = L"UPP-GL-CLASS";
|
||||
RegisterClassW(&wc);
|
||||
glHWND = CreateWindowW(
|
||||
L"UPP-FB-CLASS", L"",
|
||||
WS_OVERLAPPED | WS_VISIBLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU,
|
||||
|
||||
glHwnd = CreateWindowW(
|
||||
L"UPP-GL-CLASS", L"",
|
||||
WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
|
||||
if(!glHWND)
|
||||
if(!glHwnd)
|
||||
return -1;
|
||||
|
||||
hDC = ::GetDC(glHWND);
|
||||
hDC = ::GetDC(glHwnd);
|
||||
if(!hDC)
|
||||
return -2;
|
||||
PIXELFORMATDESCRIPTOR pfd;
|
||||
memset(&pfd, 0, sizeof(pfd));
|
||||
pfd.nSize = sizeof(pfd);
|
||||
pfd.nVersion = 1;
|
||||
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_SUPPORT_COMPOSITION;
|
||||
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_SUPPORT_COMPOSITION | PFD_GENERIC_ACCELERATED;
|
||||
pfd.iPixelType = PFD_TYPE_RGBA;
|
||||
pfd.cColorBits = 32;
|
||||
pfd.cDepthBits = 24;
|
||||
|
|
@ -101,12 +102,12 @@ int GlInit(HINSTANCE hInstance)
|
|||
int pf = ChoosePixelFormat(hDC, &pfd);
|
||||
if(!pf) {
|
||||
RLOG("OpenGL: ChoosePixelFormat error");
|
||||
DestroyGL();
|
||||
DestroyGl();
|
||||
return -3;
|
||||
}
|
||||
if(!SetPixelFormat(hDC, pf, &pfd)) {
|
||||
RLOG("OpenGL: SetPixelFormat error");
|
||||
DestroyGL();
|
||||
DestroyGl();
|
||||
return -4;
|
||||
}
|
||||
DescribePixelFormat(hDC, pf, sizeof(PIXELFORMATDESCRIPTOR), &pfd);
|
||||
|
|
@ -114,13 +115,13 @@ int GlInit(HINSTANCE hInstance)
|
|||
if(!hRC)
|
||||
{
|
||||
RLOG("OpenGL: wglCreateContext error");
|
||||
DestroyGL();
|
||||
DestroyGl();
|
||||
return -5;
|
||||
}
|
||||
if(!wglMakeCurrent(hDC, hRC))
|
||||
{
|
||||
RLOG("OpenGL: wglMakeCurrent error");
|
||||
DestroyGL();
|
||||
DestroyGl();
|
||||
return -6;
|
||||
}
|
||||
//ActivateGLContext();
|
||||
|
|
@ -128,7 +129,7 @@ int GlInit(HINSTANCE hInstance)
|
|||
if(err != GLEW_OK)
|
||||
{
|
||||
RLOG("OpenGL: Glew library initialization error: " + String((const char*) glewGetErrorString(err)));
|
||||
DestroyGL();
|
||||
DestroyGl();
|
||||
return -7;
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +137,7 @@ int GlInit(HINSTANCE hInstance)
|
|||
wglSwapIntervalEXT(0);
|
||||
//SetTimeCallback(-10, THISBACK(Repaint), 1);
|
||||
|
||||
SetTimer(glHWND, 1, 10, NULL);
|
||||
SetTimer(glHwnd, 1, 10, NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
@ -154,7 +155,7 @@ int AppMain(HINSTANCE hInstance, LPSTR lpCmdLine)
|
|||
UPP::Ctrl::CloseTopCtrls();
|
||||
UPP::UsrLog("---------- About to delete this log of WinGL...");
|
||||
UPP::DeleteUsrLog();
|
||||
UPP::DestroyGL();
|
||||
UPP::DestroyGl(false);
|
||||
return UPP::GetExitCode();
|
||||
} else {
|
||||
::MessageBox(NULL, Format("OpenGL window could not be initialized: %d", r), NULL, MB_ICONEXCLAMATION | MB_OK);
|
||||
|
|
|
|||
|
|
@ -14,13 +14,14 @@
|
|||
|
||||
NAMESPACE_UPP
|
||||
|
||||
extern bool glEndSession;
|
||||
extern HWND glHWND;
|
||||
extern HDC hDC;
|
||||
extern HGLRC hRC;
|
||||
extern bool glEndSession;
|
||||
extern HWND hWnd;
|
||||
extern HWND glHwnd;
|
||||
extern HDC hDC;
|
||||
extern HGLRC hRC;
|
||||
|
||||
void ActivateGLContext();
|
||||
void DestroyGL();
|
||||
void ActivateGlContext();
|
||||
void DestroyGl(bool destroyWindow = true);
|
||||
LRESULT CALLBACK glWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
#define GUI_FB
|
||||
|
|
|
|||
40
rainbow/WinGl/WinGl.iml
Normal file
40
rainbow/WinGl/WinGl.iml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
PREMULTIPLIED
|
||||
IMAGE_ID(arrow)
|
||||
IMAGE_ID(ibeam)
|
||||
IMAGE_ID(wait)
|
||||
IMAGE_ID(no)
|
||||
IMAGE_ID(sizeall)
|
||||
IMAGE_ID(sizehorz)
|
||||
IMAGE_ID(sizeright)
|
||||
IMAGE_ID(sizeleft)
|
||||
IMAGE_ID(sizevert)
|
||||
IMAGE_ID(sizetopleft)
|
||||
IMAGE_ID(sizetop)
|
||||
IMAGE_ID(sizetopright)
|
||||
IMAGE_ID(sizebottomleft)
|
||||
IMAGE_ID(sizebottom)
|
||||
IMAGE_ID(sizebottomright)
|
||||
|
||||
IMAGE_BEGIN_DATA
|
||||
IMAGE_DATA(120,156,237,87,189,75,28,65,20,31,3,167,1,5,9,146,46,69,26,255,9,155,180,41,83,216,165,180,176,178,75,10)
|
||||
IMAGE_DATA(73,76,44,36,4,66,56,3,26,36,104,188,228,34,104,66,82,108,35,162,226,89,248,129,224,7,126,128,136,34,136,32)
|
||||
IMAGE_DATA(34,130,86,218,253,50,220,158,27,179,59,243,246,189,89,93,21,246,55,12,236,205,253,126,111,222,199,188,185,91,85,167)
|
||||
IMAGE_DATA(30,170,6,61,170,85,149,210,128,146,1,66,13,0,145,6,231,231,143,113,118,214,200,213,224,244,180,9,39,39,79,112)
|
||||
IMAGE_DATA(124,252,148,163,193,209,209,51,28,30,54,227,224,224,57,246,246,90,226,52,216,223,111,209,188,86,236,238,182,97,103,231)
|
||||
IMAGE_DATA(5,54,55,95,81,26,108,111,191,196,214,86,187,230,189,197,250,250,59,172,174,126,196,242,114,183,77,131,141,141,46,172)
|
||||
IMAGE_DATA(173,189,199,202,74,30,75,75,125,88,88,40,98,126,254,7,230,230,6,77,26,205,233,198,226,98,143,230,245,99,118,118)
|
||||
IMAGE_DATA(4,165,82,169,50,127,99,106,170,24,214,104,91,125,154,215,143,153,153,34,166,167,255,4,124,245,175,150,151,53,154,51)
|
||||
IMAGE_DATA(160,103,1,147,147,67,152,152,248,133,177,49,143,140,119,124,124,16,163,163,223,2,59,158,55,66,242,61,239,107,196,199)
|
||||
IMAGE_DATA(225,225,239,214,252,152,114,80,40,124,161,248,198,125,123,123,63,137,206,97,62,255,65,124,214,59,59,223,136,246,232,232)
|
||||
IMAGE_DATA(120,45,222,67,192,141,34,167,234,213,61,85,83,158,42,84,120,85,110,86,31,161,231,96,243,208,231,59,191,102,137,55)
|
||||
IMAGE_DATA(146,23,85,167,19,151,211,73,203,253,159,56,238,44,107,30,253,252,76,206,75,220,52,248,164,198,192,181,106,8,110,68)
|
||||
IMAGE_DATA(195,224,6,26,9,215,197,23,151,88,93,114,121,3,245,149,157,207,7,122,220,175,12,42,113,134,201,5,183,73,56,250)
|
||||
IMAGE_DATA(36,223,75,252,76,170,143,20,144,97,195,124,251,184,235,109,126,73,245,92,27,146,239,227,246,224,248,72,197,73,33,46)
|
||||
IMAGE_DATA(199,18,189,201,39,201,89,49,173,185,234,185,118,92,250,206,165,111,227,108,153,81,175,71,77,101,48,140,186,192,37,128)
|
||||
IMAGE_DATA(176,206,69,127,97,195,21,92,173,173,185,226,214,168,198,52,173,153,26,71,58,147,236,27,199,227,172,153,144,70,141,194)
|
||||
IMAGE_DATA(154,36,231,42,201,121,188,208,219,225,255,249,245,223,28,216,34,59,79,226,104,26,135,44,110,95,91,28,148,214,71,150)
|
||||
IMAGE_DATA(56,99,28,148,214,71,150,56,99,28,148,214,71,232,21,223,102,200,230,168,233,30,73,114,183,166,189,22,87,8,123,130)
|
||||
IMAGE_DATA(107,245,200,85,134,197,136,13,146,203,87,202,53,61,115,112,155,249,215,145,39,105,157,144,117,202,21,117,10,5,73,23)
|
||||
IMAGE_DATA(81,155,39,225,114,79,158,235,111,139,11,79,210,13,105,228,143,230,103,5,79,204,187,91,5,207,174,198,171,185,26,37)
|
||||
IMAGE_DATA(221,112,157,85,55,61,115,112,155,249,55,121,187,4,243,47,233,127,209,222,0,0,0,0,0,0,0,0,0,0,0,0)
|
||||
IMAGE_END_DATA(672, 15)
|
||||
|
|
@ -27,5 +27,6 @@ file
|
|||
wglew.h,
|
||||
glew.c,
|
||||
Resources readonly separator,
|
||||
WinGl.iml,
|
||||
Fonts.brc;
|
||||
|
||||
|
|
|
|||
|
|
@ -134,19 +134,14 @@ bool Ctrl::ProcessEvent(bool *quit)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool Ctrl::ProcessEvents(bool *quit)
|
||||
void Ctrl::DrawScreen()
|
||||
{
|
||||
if(!ProcessEvent(quit))
|
||||
return false;
|
||||
while(ProcessEvent(quit) && (!LoopCtrl || LoopCtrl->InLoop()) && !GlEndSession()); // LoopCtrl-MF 071008
|
||||
TimerProc(GetTickCount());
|
||||
SweepMkImageCache();
|
||||
if(desktop && !painting) {
|
||||
painting = true;
|
||||
RemoveCursor();
|
||||
RemoveCaret();
|
||||
|
||||
ActivateGLContext();
|
||||
ActivateGlContext();
|
||||
//SyncLayout(1);
|
||||
//InitInfoPanel();
|
||||
Rect rect;
|
||||
|
|
@ -165,6 +160,16 @@ bool Ctrl::ProcessEvents(bool *quit)
|
|||
painting = false;
|
||||
LOGF("Fps %.2f\n", GetFps());
|
||||
}
|
||||
}
|
||||
|
||||
bool Ctrl::ProcessEvents(bool *quit)
|
||||
{
|
||||
if(!ProcessEvent(quit))
|
||||
return false;
|
||||
while(ProcessEvent(quit) && (!LoopCtrl || LoopCtrl->InLoop()) && !GlEndSession()); // LoopCtrl-MF 071008
|
||||
TimerProc(GetTickCount());
|
||||
SweepMkImageCache();
|
||||
DrawScreen();
|
||||
CursorSync();
|
||||
return false;
|
||||
}
|
||||
|
|
@ -358,7 +363,7 @@ bool Ctrl::HasWndCapture() const
|
|||
void Ctrl::WndInvalidateRect0(const Rect& r)
|
||||
{
|
||||
GuiLock __;
|
||||
::InvalidateRect(glHWND, NULL, false);
|
||||
::InvalidateRect(glHwnd, NULL, false);
|
||||
}
|
||||
|
||||
void Ctrl::WndSetPos0(const Rect& rect)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue