|
Post by alexfish on May 31, 2023 15:55:47 GMT 1
Had To Implement gdk_pixbuf_flip flip = gdk_pixbuf_new_from_file(HOME$ & "/BaConEyes.png",0) pix = gdk_pixbuf_flip(flip,0) xx= gdk_pixbuf_get_width(pix) yy = gdk_pixbuf_get_height(pix) Think that is a Wrap till Friday BR Alex Attachments:
|
|
|
Post by alexfish on Jun 1, 2023 2:39:10 GMT 1
Worked through to find a RPI4 imager fix + added load all functions from the gl.bac on call to GTK-GLAREA + method to load jpg images. may work with other And so To , update image will be two libs one as original and one for PI4 hug353pi.bac The updated versions will be out Later Today hence posting this for pi4 . and test jpeg image The hug353pi.bac should work on all distro's Will need to import the gl.bac in new hug3.5.3.bac , although not much diff in mem usage Suppose end user has a choice:: INCLUDE hug353pi.bac HUGOPTIONS("CANVAS GLAREA") HUGOPTIONS("NOSCALING")
'========================= HOME$ = GETENVIRON$("HOME") '========================
'Declare global texture DECLARE texture TYPE unsigned int
'============================================= SUB DrawGL_Cube() LOCAL ouy = 0.5 TYPE float LOCAL xrot=0, yrot = 0, zrot=0 TYPE static int LOCAL pix, ebox
REM Get the associated canvas pix = hug_gui_properties.canvas ebox = hug_widget_ebox(STR$(pix))
gtk_gl_area_make_current(hug_gui_properties.canvas)
glEnable(GL_CULL_FACE) glEnable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glRotatef(xrot,1.0f,0.0f,0.0f) glRotatef(yrot,0.0f,1.0f,0.0f) glRotatef(zrot,0.0f,0.0f,1.0f) 'glScalef(0.5,0.5,0.5) glBindTexture(GL_TEXTURE_2D, texture)
glBegin(GL_QUADS)
'Font Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-ouy, -ouy, ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f( ouy, -ouy, ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f( ouy, ouy, ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f(-ouy, ouy, ouy)
' Back Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-ouy, -ouy, -ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f(-ouy, ouy, -ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f( ouy, ouy, -ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f( ouy, -ouy, -ouy)
' Top Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-ouy, ouy, -ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f(-ouy, ouy, ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f( ouy, ouy, ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f( ouy, ouy, -ouy)
' Bottom Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-ouy, -ouy, -ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f( ouy, -ouy, -ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f( ouy, -ouy, ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f(-ouy, -ouy, ouy)
' Right face glTexCoord2f(0.0f, 0.0f); glVertex3f( ouy, -ouy, -ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f( ouy, ouy, -ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f( ouy, ouy, ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f( ouy, -ouy, ouy)
' Left Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-ouy, -ouy, -ouy) glTexCoord2f(1.0f, 0.0f); glVertex3f(-ouy, -ouy, ouy) glTexCoord2f(1.0f, 1.0f); glVertex3f(-ouy, ouy, ouy) glTexCoord2f(0.0f, 1.0f); glVertex3f(-ouy, ouy, -ouy)
glEnd()
INCR xrot ,2 INCR yrot ,3 INCR zrot ,4 '=UPDATE THE SCREEN ====================== gtk_widget_queue_draw(hug_widget_image(STR$(ebox)) ) '===================================== END SUB
'===================================== SUB LoadGLTexturePng(hug_file$)
LOCAL pix,flip LOCAL boundTexture = 0 TYPE unsigned int LOCAL xx,yy,channels LOCAL data TYPE unsigned char* flip = gdk_pixbuf_new_from_file(hug_file$,0) pix = gdk_pixbuf_flip(flip,0) xx= gdk_pixbuf_get_width(pix) yy = gdk_pixbuf_get_height(pix) channels = gdk_pixbuf_get_n_channels(pix) data=(unsigned char*) gdk_pixbuf_get_pixels(pix)
IF channels = 4 THEN glEnable(GL_TEXTURE_2D) glGetIntegerv(GL_TEXTURE_BINDING_2D,(unsigned int) &boundTexture) glGenTextures(1,(unsigned int) &texture) glBindTexture(GL_TEXTURE_2D, texture) 'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) 'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xx, yy, 0, GL_RGBA, GL_UNSIGNED_BYTE,(void *) data) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) END IF
IF channels = 3 THEN glEnable(GL_TEXTURE_2D) glGetIntegerv(GL_TEXTURE_BINDING_2D,(unsigned int) &boundTexture) glGenTextures(1,(unsigned int) &texture) glBindTexture(GL_TEXTURE_2D, texture) 'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) 'glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xx, yy, 0, GL_RGB, GL_UNSIGNED_BYTE,(void *) data) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) END IF g_object_unref(pix) g_object_unref(flip) END SUB
'============================================= SUB LoadGLTextureTry(hug_file$) ' Convert To Png LOCAL pix
LOCAL data TYPE unsigned char* pix = gdk_pixbuf_new_from_file(hug_file$,0) gdk_pixbuf_save (pix, HOME$ & "/my.png", "png", 0, NULL) g_object_unref(pix) LoadGLTexturePng(HOME$ & "/my.png")
END SUB '============================================= SUB Draw3d LOCAL pix, ebox LOCAL cube_size = 200 REM Get the associated canvas pix = hug_gui_properties.canvas ebox = hug_widget_ebox(STR$(pix))
gtk_gl_area_make_current(hug_gui_properties.canvas) /*load textures now : leave as is :: since most times will be loading multiple textures into a array[] IF texture[*] = 0 THEN blagh END IF */
IF texture = 0 THEN '' Image must be 3/4 channel png ' not PNG LoadGLTextureTry(HOME$ & "/BaConEyes.jpg") 'PNG 'LoadGLTexturePng(HOME$ & "/BaConEyes.png") END IF
IF texture THEN glEnable(GL_CULL_FACE) glEnable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) 'white rgba ' drawing other renders choice is use apha 0 to one glClearColor(0.8, 0.5, 0.1, 1.0) glViewport((600/2)- (cube_size/2) , (350/2) -(cube_size/2), cube_size ,cube_size) DrawGL_Cube() TIMEOUT(60,Draw3d) END IF
END SUB
'=Main ================================ win =WINDOW ("GL - JPG - test",606,409)
but = BUTTON(" Draw " ,100,30) ATTACH(win,but,3,3) CALLBACK(but,Draw3d)
can = CANVAS(600,370) ATTACH(win,can,3,36)
DISPLAY time for zzzzzzzzzzzzz BR Alex Attachments:
|
|
|
Post by alexfish on Jun 17, 2023 9:17:53 GMT 1
Hi All
have tested gl bits in RPI OS 64bit
This highlights some bugs in the Textures ::
IMPORT "glGetIntegerv(int,long)" FROM gl_LIB$ TYPE void should be
IMPORT "glGetIntegerv(int,int*)" FROM gl_LIB$ TYPE void And
IMPORT "glGenTextures(int,long)" FROM gl_LIB$ TYPE void
should be
IMPORT "glGenTextures(int,int*)" FROM gl_LIB$ TYPE void
have tested on 32bit and the code works ::
Hence looks like further work required on the GL bits
however example will go ahead when glarea is updated for HUG3.bac
also note that the data* is
IMPORT "glTexImage2D(int,int,int,int,int,int,int,int,const void * )" FROM gl_LIB$ TYPE void
hence the gen texture code looks like
SUB LoadGLTexturePng(hug_file$)
LOCAL pix,flip LOCAL boundTexture = 0 TYPE unsigned int LOCAL xx,yy,channels LOCAL data TYPE unsigned char* flip = gdk_pixbuf_new_from_file(hug_file$,0) pix = gdk_pixbuf_flip(flip,0) xx= gdk_pixbuf_get_width(pix) yy = gdk_pixbuf_get_height(pix) channels = gdk_pixbuf_get_n_channels(pix) data=(unsigned char*) gdk_pixbuf_get_pixels(pix)
IF channels = 4 THEN glEnable(GL_TEXTURE_2D) glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundTexture) glGenTextures(1, &texture) glBindTexture(GL_TEXTURE_2D, texture) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xx, yy, 0, GL_RGBA, GL_UNSIGNED_BYTE,(void *) data) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) END IF
IF channels = 3 THEN glEnable(GL_TEXTURE_2D) glGetIntegerv(GL_TEXTURE_BINDING_2D, &boundTexture) glGenTextures(1, &texture) glBindTexture(GL_TEXTURE_2D, texture) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xx, yy, 0, GL_RGB, GL_UNSIGNED_BYTE,(void *) data) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) END IF g_object_unref(pix) g_object_unref(flip) END SUB
BR Alex
Updated:: NOTE
LoadGLTexturePng
although says png : should be "LoadGLTexture" from file since the 'gdk_pixbuf_new_from_file' loads most image formats :: consult gdk bixbuf Docs
|
|