Need help for glReadPixels

BlitzMax Forums/OpenGL Module/Need help for glReadPixels

Haramanai(Posted 2005) [#1]
Fills like I am double posting but anyway.
I tryed to use glReadPixel so to be able to copy an openGL scene into a PixMap (Just from curiosity) cause i never used any other programming language expect Blitz Max(and very little Java) I wasn't able to follow some examples i found in the internet.
Well...
Let's Say The scene is ready

Global i:Int
Global i_ptr:Byte Ptr

glReadPixels 0 , 0 , 639 , 479 , GL_RGB , GL_UNSIGNED_INT , i_ptr


but after the line of glReadPixels the program crash
after a thousand crashes i found a way but its really slow
Global i:Int
Global i_ptr:Byte Ptr
i_ptr = Varptr i
Global Red_%
Global Green_%
Global Blue_%
Global ALPHA_% 
Global pixMap:TPixMap = CreatePixmap(640 , 480 , PF_RGBA8888)
bglDrawText "This Will Take Some Time..." , 10 , 10
bglDrawText "When It will Finish press Space To go to Max2d" , 10 , 50
bglSwapBuffers
glReadBuffer(GL_FRONT)
For Local Col = 0 To 480 - 1
	For Local Raw = 0 To 640 - 1
		glreadpixels Raw , Col , 1 , 1 , GL_Red , GL_UNSIGNED_Int , i_ptr
		Red_ = i_ptr[0]
		glreadpixels Raw , Col , 1 , 1 , GL_GREEN , GL_UNSIGNED_Int , i_ptr
		Green_ = i_ptr[0]
		glreadpixels Raw , Col , 1 , 1 , GL_BLUE , GL_UNSIGNED_Int , i_ptr
		BLUE_ = i_ptr[0]
		glreadpixels Raw , Col , 1 , 1 , GL_ALPHA , GL_UNSIGNED_Int , i_ptr
		ALPHA_ = i_ptr[0]
		argb = (ALPHA_ Shl 24) + (Red_ Shl 16) + (Green_ Shl 8) + (Blue_)
		WritePixel(pixMap , Raw , Col , argb)
		FlushMem
	Next
Next
pixmap = YFlipPixmap(pixMap)


can anyone tell me what i have done wrong in the first code? or so me an example of use glReadPixel to grab more than one pixels and colors in a call


Extron(Posted 2005) [#2]
Global pixMap:TPixMap = CreatePixmap(640 , 480 , PF_RGB888)
Global i_ptr:Byte Ptr=PixmapPixelPtr(pixMap)

bglDrawText "This Will Take No Time..." , 10 , 10
bglDrawText "When It will Finish press Space To go to Max2d" , 10 , 50
bglSwapBuffers
glReadBuffer(GL_FRONT)

glReadPixels(0 , 0 , 640 , 480 , GL_RGB , GL_UNSIGNED_BYTE , i_ptr)
pixmap = YFlipPixmap(pixMap)


Oops! A small error. ;)
Changing "glReadPixels(etc...) to "glReadPixels(0 , 0 , 640 , 480 , GL_RGB , GL_UNSIGNED_BYTE , i_ptr)"

And this work also for RGBA like this :
Global pixMap:TPixMap = CreatePixmap(640 , 480 , PF_RGBA8888)
Global i_ptr:Byte Ptr=PixmapPixelPtr(pixMap)

bglDrawText "This Will Take No Time..." , 10 , 10
bglDrawText "When It will Finish press Space To go to Max2d" , 10 , 50
bglSwapBuffers
glReadBuffer(GL_FRONT)

glReadPixels(0 , 0 , 640 , 480 , GL_RGBA , GL_UNSIGNED_BYTE , i_ptr)
pixmap = YFlipPixmap(pixMap)



Haramanai(Posted 2005) [#3]
thanks