def paint_rgb24(self, img_data, x, y, width, height, rowstride): # OpenGL begin if not self.gldrawable.gl_begin(self.glcontext): log.error("OUCH") return False # Upload texture if not self.texture: self.texture = glGenTextures(1) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.texture) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstride / 3) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img_data) vtxarrays = 1 if vtxarrays == 1: texcoords = [[0, 0], [0, height], [width, height], [width, 0]] vtxcoords = texcoords glVertexPointeri(vtxcoords) glTexCoordPointeri(texcoords) glDrawArrays(GL_QUADS, 0, 4) else: glBegin(GL_QUADS) glTexCoord2i(0, 0) glVertex2i(0, 0) glTexCoord2i(0, height) glVertex2i(0, height) glTexCoord2i(width, height) glVertex2i(width, height) glTexCoord2i(width, 0) glVertex2i(width, 0) glEnd() # OpenGL end #self.gldrawable.swap_buffers() # self.gldrawable.swap_buffers() glFinish() self.gldrawable.gl_end()
def paint_rgb24(self, img_data, x, y, width, height, rowstride): # OpenGL begin if not self.gldrawable.gl_begin(self.glcontext): log.error("OUCH") return False # Upload texture if not self.texture: self.texture = glGenTextures(1) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.texture) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE) glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstride/3) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img_data); vtxarrays=1 if vtxarrays == 1: texcoords = [ [ 0, 0 ], [ 0, height], [ width, height], [ width, 0] ] vtxcoords = texcoords glVertexPointeri(vtxcoords) glTexCoordPointeri(texcoords) glDrawArrays(GL_QUADS, 0, 4); else: glBegin(GL_QUADS); glTexCoord2i(0, 0); glVertex2i(0, 0); glTexCoord2i(0, height); glVertex2i(0, height); glTexCoord2i(width, height); glVertex2i(width, height); glTexCoord2i(width, 0); glVertex2i(width, 0); glEnd() # OpenGL end #self.gldrawable.swap_buffers() # self.gldrawable.swap_buffers() glFinish() self.gldrawable.gl_end()
def render_image(self): drawable = self.glarea.get_gl_drawable() context = self.glarea.get_gl_context() w, h = self.get_size() if not drawable.gl_begin(context): raise Exception("** Cannot create OpenGL rendering context!") texcoords = [ [ 0, 0 ], [ 0, h ], [ w, h ], [ w, 0 ] ] vtxcoords = texcoords if self.current_mode == GLClientWindow.MODE_RGB: glVertexPointeri(vtxcoords) glTexCoordPointeri(texcoords) glDrawArrays(GL_QUADS, 0, 4); elif self.current_mode == GLClientWindow.MODE_YUV: glEnable(GL_FRAGMENT_PROGRAM_ARB) glBegin(GL_QUADS); glMultiTexCoord2i(GL_TEXTURE0, 0, 0); glMultiTexCoord2i(GL_TEXTURE1, 0, 0); glMultiTexCoord2i(GL_TEXTURE2, 0, 0); glVertex2i(0, 0); glMultiTexCoord2i(GL_TEXTURE0, 0, h); glMultiTexCoord2i(GL_TEXTURE1, 0, h/2); glMultiTexCoord2i(GL_TEXTURE2, 0, h/2); glVertex2i(0, h); glMultiTexCoord2i(GL_TEXTURE0, w, h); glMultiTexCoord2i(GL_TEXTURE1, w/2, h/2); glMultiTexCoord2i(GL_TEXTURE2, w/2, h/2); glVertex2i(w, h); glMultiTexCoord2i(GL_TEXTURE0, w, 0); glMultiTexCoord2i(GL_TEXTURE1, w/2, 0); glMultiTexCoord2i(GL_TEXTURE2, w/2, 0); glVertex2i(w, 0); glEnd() drawable.swap_buffers() drawable.gl_end()
def render_image(self): drawable = self.glarea.get_gl_drawable() context = self.glarea.get_gl_context() w, h = self.get_size() if not drawable.gl_begin(context): raise Exception("** Cannot create OpenGL rendering context!") texcoords = [[0, 0], [0, h], [w, h], [w, 0]] vtxcoords = texcoords if self.current_mode == GLClientWindow.MODE_RGB: glVertexPointeri(vtxcoords) glTexCoordPointeri(texcoords) glDrawArrays(GL_QUADS, 0, 4) elif self.current_mode == GLClientWindow.MODE_YUV: glEnable(GL_FRAGMENT_PROGRAM_ARB) glBegin(GL_QUADS) glMultiTexCoord2i(GL_TEXTURE0, 0, 0) glMultiTexCoord2i(GL_TEXTURE1, 0, 0) glMultiTexCoord2i(GL_TEXTURE2, 0, 0) glVertex2i(0, 0) glMultiTexCoord2i(GL_TEXTURE0, 0, h) glMultiTexCoord2i(GL_TEXTURE1, 0, h / 2) glMultiTexCoord2i(GL_TEXTURE2, 0, h / 2) glVertex2i(0, h) glMultiTexCoord2i(GL_TEXTURE0, w, h) glMultiTexCoord2i(GL_TEXTURE1, w / 2, h / 2) glMultiTexCoord2i(GL_TEXTURE2, w / 2, h / 2) glVertex2i(w, h) glMultiTexCoord2i(GL_TEXTURE0, w, 0) glMultiTexCoord2i(GL_TEXTURE1, w / 2, 0) glMultiTexCoord2i(GL_TEXTURE2, w / 2, 0) glVertex2i(w, 0) glEnd() drawable.swap_buffers() drawable.gl_end()
def paint_yuv420(self, img_data, x, y, width, height, rowstrides): #import time #before=time.time() # OpenGL begin if not self.gldrawable.gl_begin(self.glcontext): log.error("OUCH") return False # Upload texture if self.textures[0] == 0: self.textures = glGenTextures(3) glEnable(GL_FRAGMENT_PROGRAM_ARB) if not self.yuv420_shader: self.yuv420_shader = [1] glGenProgramsARB(1, self.yuv420_shader) glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, self.yuv420_shader[0]) # The following fragprog is: # * MIT X11 license, Copyright (c) 2007 by: # * Michael Dominic K. <*****@*****.**> #http://www.mdk.org.pl/2007/11/17/gl-colorspace-conversions prog = """!!ARBfp1.0 # cgc version 3.1.0010, build date Feb 10 2012 # command line args: -profile arbfp1 # source file: yuv.cg #vendor NVIDIA Corporation #version 3.1.0.10 #profile arbfp1 #program main #semantic main.IN #var float2 IN.texcoord1 : $vin.TEXCOORD0 : TEX0 : 0 : 1 #var float2 IN.texcoord2 : $vin.TEXCOORD1 : TEX1 : 0 : 1 #var float2 IN.texcoord3 : $vin.TEXCOORD2 : TEX2 : 0 : 1 #var samplerRECT IN.texture1 : TEXUNIT0 : texunit 0 : 0 : 1 #var samplerRECT IN.texture2 : TEXUNIT1 : texunit 1 : 0 : 1 #var samplerRECT IN.texture3 : TEXUNIT2 : texunit 2 : 0 : 1 #var float4 IN.color : $vin.COLOR0 : COL0 : 0 : 1 #var float4 main.color : $vout.COLOR0 : COL : -1 : 1 #const c[0] = 1.1643835 2.017231 0 0.5 #const c[1] = 0.0625 1.1643835 -0.3917616 -0.81296802 #const c[2] = 1.1643835 0 1.5960271 PARAM c[3] = { { 1.1643835, 2.017231, 0, 0.5 }, { 0.0625, 1.1643835, -0.3917616, -0.81296802 }, { 1.1643835, 0, 1.5960271 } }; TEMP R0; TEMP R1; TEX R0.x, fragment.texcoord[2], texture[2], RECT; ADD R1.z, R0.x, -c[0].w; TEX R1.x, fragment.texcoord[0], texture[0], RECT; TEX R0.x, fragment.texcoord[1], texture[1], RECT; ADD R1.x, R1, -c[1]; ADD R1.y, R0.x, -c[0].w; DP3 result.color.z, R1, c[0]; DP3 result.color.y, R1, c[1].yzww; DP3 result.color.x, R1, c[2]; MOV result.color.w, fragment.color.primary; END # 10 instructions, 2 R-regs """ glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, len(prog), prog) log.error(glGetString(GL_PROGRAM_ERROR_STRING_ARB)) glEnable(GL_FRAGMENT_PROGRAM_ARB) glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, self.yuv420_shader[0]) glActiveTexture(GL_TEXTURE0) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[0]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[0]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[0]) glActiveTexture(GL_TEXTURE1) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[1]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[1]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width / 2, height / 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[1]) glActiveTexture(GL_TEXTURE2) glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[2]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[2]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width / 2, height / 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[2]) vtxarrays = 0 if vtxarrays == 1: texcoords = [[0, 0], [0, height], [width, height], [width, 0]] vtxcoords = texcoords texcoords_half = [[0, 0], [0, height / 2], [width / 2, height / 2], [width / 2, 0]] glVertexPointeri(vtxcoords) glActiveTexture(GL_TEXTURE0) glClientActiveTexture(GL_TEXTURE0) glEnableClientState(GL_TEXTURE_COORD_ARRAY) glTexCoordPointeri(texcoords) glActiveTexture(GL_TEXTURE1) glClientActiveTexture(GL_TEXTURE1) glEnableClientState(GL_TEXTURE_COORD_ARRAY) glTexCoordPointeri(texcoords_half) glActiveTexture(GL_TEXTURE2) glClientActiveTexture(GL_TEXTURE2) glEnableClientState(GL_TEXTURE_COORD_ARRAY) glTexCoordPointeri(texcoords_half) glDrawArrays(GL_QUADS, 0, 4) else: glBegin(GL_QUADS) glMultiTexCoord2i(GL_TEXTURE0, 0, 0) glMultiTexCoord2i(GL_TEXTURE1, 0, 0) glMultiTexCoord2i(GL_TEXTURE2, 0, 0) glVertex2i(0, 0) glMultiTexCoord2i(GL_TEXTURE0, 0, height) glMultiTexCoord2i(GL_TEXTURE1, 0, height / 2) glMultiTexCoord2i(GL_TEXTURE2, 0, height / 2) glVertex2i(0, height) glMultiTexCoord2i(GL_TEXTURE0, width, height) glMultiTexCoord2i(GL_TEXTURE1, width / 2, height / 2) glMultiTexCoord2i(GL_TEXTURE2, width / 2, height / 2) glVertex2i(width, height) glMultiTexCoord2i(GL_TEXTURE0, width, 0) glMultiTexCoord2i(GL_TEXTURE1, width / 2, 0) glMultiTexCoord2i(GL_TEXTURE2, width / 2, 0) glVertex2i(width, 0) glEnd() # OpenGL end #self.gldrawable.swap_buffers() # self.gldrawable.swap_buffers() glFinish() self.gldrawable.gl_end()
def paint_yuv420(self, img_data, x, y, width, height, rowstrides): #import time #before=time.time() # OpenGL begin if not self.gldrawable.gl_begin(self.glcontext): log.error("OUCH") return False # Upload texture if self.textures[0] == 0: self.textures = glGenTextures(3) glEnable(GL_FRAGMENT_PROGRAM_ARB) if not self.yuv420_shader: self.yuv420_shader = [ 1 ] glGenProgramsARB(1, self.yuv420_shader) glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, self.yuv420_shader[0]) # The following fragprog is: # * MIT X11 license, Copyright (c) 2007 by: # * Michael Dominic K. <*****@*****.**> #http://www.mdk.org.pl/2007/11/17/gl-colorspace-conversions prog = """!!ARBfp1.0 # cgc version 3.1.0010, build date Feb 10 2012 # command line args: -profile arbfp1 # source file: yuv.cg #vendor NVIDIA Corporation #version 3.1.0.10 #profile arbfp1 #program main #semantic main.IN #var float2 IN.texcoord1 : $vin.TEXCOORD0 : TEX0 : 0 : 1 #var float2 IN.texcoord2 : $vin.TEXCOORD1 : TEX1 : 0 : 1 #var float2 IN.texcoord3 : $vin.TEXCOORD2 : TEX2 : 0 : 1 #var samplerRECT IN.texture1 : TEXUNIT0 : texunit 0 : 0 : 1 #var samplerRECT IN.texture2 : TEXUNIT1 : texunit 1 : 0 : 1 #var samplerRECT IN.texture3 : TEXUNIT2 : texunit 2 : 0 : 1 #var float4 IN.color : $vin.COLOR0 : COL0 : 0 : 1 #var float4 main.color : $vout.COLOR0 : COL : -1 : 1 #const c[0] = 1.1643835 2.017231 0 0.5 #const c[1] = 0.0625 1.1643835 -0.3917616 -0.81296802 #const c[2] = 1.1643835 0 1.5960271 PARAM c[3] = { { 1.1643835, 2.017231, 0, 0.5 }, { 0.0625, 1.1643835, -0.3917616, -0.81296802 }, { 1.1643835, 0, 1.5960271 } }; TEMP R0; TEMP R1; TEX R0.x, fragment.texcoord[2], texture[2], RECT; ADD R1.z, R0.x, -c[0].w; TEX R1.x, fragment.texcoord[0], texture[0], RECT; TEX R0.x, fragment.texcoord[1], texture[1], RECT; ADD R1.x, R1, -c[1]; ADD R1.y, R0.x, -c[0].w; DP3 result.color.z, R1, c[0]; DP3 result.color.y, R1, c[1].yzww; DP3 result.color.x, R1, c[2]; MOV result.color.w, fragment.color.primary; END # 10 instructions, 2 R-regs """ glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, len(prog), prog) log.error(glGetString(GL_PROGRAM_ERROR_STRING_ARB)) glEnable(GL_FRAGMENT_PROGRAM_ARB) glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, self.yuv420_shader[0]) glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[0]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[0]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[0]); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[1]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[1]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width/2, height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[1]); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, self.textures[2]) glEnable(GL_TEXTURE_RECTANGLE_ARB) glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glPixelStorei(GL_UNPACK_ROW_LENGTH, rowstrides[2]) glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, width/2, height/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img_data[2]); vtxarrays=0 if vtxarrays == 1: texcoords = [ [ 0, 0 ], [ 0, height], [ width, height], [ width, 0] ] vtxcoords = texcoords texcoords_half = [ [ 0, 0 ], [ 0, height/2], [ width/2, height/2], [ width/2, 0] ] glVertexPointeri(vtxcoords) glActiveTexture(GL_TEXTURE0); glClientActiveTexture(GL_TEXTURE0) glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointeri(texcoords) glActiveTexture(GL_TEXTURE1); glClientActiveTexture(GL_TEXTURE1) glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointeri(texcoords_half) glActiveTexture(GL_TEXTURE2); glClientActiveTexture(GL_TEXTURE2) glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointeri(texcoords_half) glDrawArrays(GL_QUADS, 0, 4); else: glBegin(GL_QUADS); glMultiTexCoord2i(GL_TEXTURE0, 0, 0); glMultiTexCoord2i(GL_TEXTURE1, 0, 0); glMultiTexCoord2i(GL_TEXTURE2, 0, 0); glVertex2i(0, 0); glMultiTexCoord2i(GL_TEXTURE0, 0, height); glMultiTexCoord2i(GL_TEXTURE1, 0, height/2); glMultiTexCoord2i(GL_TEXTURE2, 0, height/2); glVertex2i(0, height); glMultiTexCoord2i(GL_TEXTURE0, width, height); glMultiTexCoord2i(GL_TEXTURE1, width/2, height/2); glMultiTexCoord2i(GL_TEXTURE2, width/2, height/2); glVertex2i(width, height); glMultiTexCoord2i(GL_TEXTURE0, width, 0); glMultiTexCoord2i(GL_TEXTURE1, width/2, 0); glMultiTexCoord2i(GL_TEXTURE2, width/2, 0); glVertex2i(width, 0); glEnd() # OpenGL end #self.gldrawable.swap_buffers() # self.gldrawable.swap_buffers() glFinish() self.gldrawable.gl_end()