Home » Community » U++ community news and announcements » GLCtrl in GTK
Re: GLCtrl in GTK [message #50693 is a reply to message #50682] |
Thu, 06 December 2018 08:10   |
 |
mirek
Messages: 14265 Registered: November 2005
|
Ultimate Member |
|
|
Thank you. Now let us try adding some LOGs to GLCtrl/GTKGlCtrl.cpp.
Please change it to:
#include "GLCtrl.h"
#ifdef GUI_GTK
#include <GL/glx.h>
#include <GL/gl.h>
#include <gdk/gdkx.h>
namespace Upp {
static XVisualInfo *s_XVisualInfo;
static Colormap s_Colormap;
static GLXContext s_GLXContext;
static ::Display *s_Display;
EXITBLOCK {
if(s_GLXContext)
glXDestroyContext(s_Display, s_GLXContext);
}
void GLCtrl::Create()
{
DLOG("Create");
Ctrl *top = GetTopCtrl();
if(!top)
return;
GdkWindow *gdk = top->gdk();
if(!gdk)
return;
DDUMP(gdk);
Window w = gdk_x11_drawable_get_xid((GdkDrawable *)gdk);
DDUMP(w);
ONCELOCK {
s_Display = gdk_x11_drawable_get_xdisplay((GdkDrawable *)gdk);
int samples = numberOfSamples;
GLXFBConfig *fbc;
do {
Vector<int> attr;
attr << GLX_RGBA << GLX_DEPTH_SIZE << depthSize
<< GLX_STENCIL_SIZE << stencilSize;
if(doubleBuffering)
attr << GLX_DOUBLEBUFFER;
if(samples > 1)
attr << GLX_SAMPLE_BUFFERS_ARB << 1 << GLX_SAMPLES_ARB << samples;
attr << 0;
samples >>= 1;
int fbcount;
fbc = glXChooseFBConfig(s_Display, DefaultScreen(s_Display), attr, &fbcount);
}
while(!fbc && samples > 0);
DDUMP(fbc);
if(!fbc)
return;
s_XVisualInfo = glXGetVisualFromFBConfig(s_Display, fbc[0]);
s_Colormap = XCreateColormap(s_Display, RootWindow(s_Display, s_XVisualInfo->screen), s_XVisualInfo->visual, AllocNone);
s_GLXContext = glXCreateContext(s_Display, s_XVisualInfo, NULL, GL_TRUE);
DDUMP(s_XVisualInfo);
DDUMP(s_Colormap);
DDUMP(s_GLXContext);
}
if(!s_GLXContext)
return;
XSetWindowAttributes swa;
swa.colormap = s_Colormap;
swa.border_pixel = 0;
swa.event_mask = 0;
win = XCreateWindow(s_Display, w, 0, 0, 1, 1, 0,
s_XVisualInfo->depth, InputOutput, s_XVisualInfo->visual,
CWBorderPixel|CWColormap|CWEventMask, &swa);
visible = false;
position = Null;
DDUMP(win);
}
void GLCtrl::Sync()
{
if(win) {
Rect r = GetScreenView() - GetTopCtrl()->GetScreenRect().TopLeft();
bool b = IsVisible() && r.GetWidth() > 0 && r.GetHeight() > 0;
if(b != visible) {
visible = b;
position = Null;
if(b)
XMapWindow(s_Display, win);
else
XUnmapWindow(s_Display, win);
}
if(r != position && visible) {
position = r;
XMoveResizeWindow(s_Display, win, r.left, r.top, r.Width(), r.Height());
}
DDUMP(visible);
DDUMP(r);
}
}
void GLCtrl::State(int reason)
{
DLOG("State");
switch(reason) {
case CLOSE:
DLOG("Destroy");
XDestroyWindow(s_Display, win);
break;
case OPEN:
DLOG("Create");
Create();
default:
DLOG("Sync");
Sync();
break;
}
}
void GLCtrl::Paint(Draw& w)
{
Size sz = GetSize();
DLOG("Paint");
DDUMP(s_GLXContext);
DDUMP(sz);
DDUMP(s_Display);
if(!s_GLXContext || sz.cx == 0 || sz.cy == 0)
return;
glXMakeCurrent(s_Display, win, s_GLXContext);
ONCELOCK {
glewInit();
}
DLOG("DoGLPaint");
DoGLPaint();
if(doubleBuffering)
glXSwapBuffers(s_Display, win);
else
glFlush();
glXMakeCurrent(s_Display, None, NULL);
}
}
#endif
run reference/OpenGL (without changing anything else) and post a .log file here (Alt+L).
Thanks. We need to figure this out...
Mirek
|
|
|
 |
|
GLCtrl in GTK
By: mirek on Sun, 25 November 2018 20:47
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Mon, 26 November 2018 04:35
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Wed, 28 November 2018 05:43
|
 |
|
Re: GLCtrl in GTK
By: mirek on Wed, 28 November 2018 09:39
|
 |
|
Re: GLCtrl in GTK
By: Oblivion on Wed, 28 November 2018 10:03
|
 |
|
Re: GLCtrl in GTK
By: mirek on Wed, 28 November 2018 10:41
|
 |
|
Re: GLCtrl in GTK
By: Oblivion on Wed, 28 November 2018 13:24
|
 |
|
Re: GLCtrl in GTK
By: mirek on Wed, 28 November 2018 17:25
|
 |
|
Re: GLCtrl in GTK
By: Oblivion on Wed, 28 November 2018 18:54
|
 |
|
Re: GLCtrl in GTK
By: mirek on Thu, 29 November 2018 09:21
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Thu, 29 November 2018 13:33
|
 |
|
Re: GLCtrl in GTK
By: mirek on Mon, 03 December 2018 08:54
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Wed, 05 December 2018 04:14
|
 |
|
Re: GLCtrl in GTK
By: mirek on Thu, 06 December 2018 08:10
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sat, 08 December 2018 23:38
|
 |
|
Re: GLCtrl in GTK
By: mirek on Sun, 09 December 2018 12:08
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sun, 09 December 2018 19:49
|
 |
|
Re: GLCtrl in GTK
By: mirek on Mon, 10 December 2018 08:50
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Thu, 29 November 2018 04:54
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Thu, 29 November 2018 05:25
|
 |
|
Re: GLCtrl in GTK
By: mirek on Thu, 29 November 2018 08:39
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Tue, 11 December 2018 06:09
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Tue, 11 December 2018 06:19
|
 |
|
Re: GLCtrl in GTK
By: mirek on Tue, 11 December 2018 10:47
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Wed, 12 December 2018 04:43
|
 |
|
Re: GLCtrl in GTK
By: mirek on Wed, 12 December 2018 09:10
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sat, 15 December 2018 04:56
|
 |
|
Re: GLCtrl in GTK
By: mirek on Sat, 15 December 2018 11:48
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sun, 16 December 2018 05:14
|
 |
|
Re: GLCtrl in GTK
By: mirek on Sun, 16 December 2018 08:11
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sun, 16 December 2018 19:04
|
 |
|
Re: GLCtrl in GTK
By: mirek on Sun, 16 December 2018 20:54
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Mon, 17 December 2018 04:44
|
 |
|
Re: GLCtrl in GTK
By: mirek on Thu, 20 December 2018 10:12
|
 |
|
Re: GLCtrl in GTK
By: ptkacz on Sat, 22 December 2018 18:31
|
 |
|
Re: GLCtrl in GTK
By: koldo on Sun, 07 April 2019 12:06
|
 |
|
Re: GLCtrl in GTK
By: mirek on Sun, 07 April 2019 12:25
|
 |
|
Re: GLCtrl in GTK
By: koldo on Sun, 07 April 2019 21:25
|
Goto Forum:
Current Time: Sat Jul 05 17:51:34 CEST 2025
Total time taken to generate the page: 0.06485 seconds
|