I’m trying to set up a render to texture using the auxiliary bitplane, however Panda3D does not seem to be able to create the offscreen buffer. Sadly, I don’t get any error message, makeOutput() just returns None (See at the end of the post for a short example)
The debug output of the graphic card capabilities does not show any mode that has aux buffers available, however aux buffer support is present in glxinfo :
:task(debug): AsyncTaskManager TaskManager task chain loader; 0 tasks: set_num_threads(1) :display:gsg:glgsg(debug): GL_VENDOR = NVIDIA Corporation :display:gsg:glgsg(debug): GL_RENDERER = GeForce GTX 675MX/PCIe/SSE2 :display:gsg:glgsg(debug): GL_VERSION = 4.5.0 NVIDIA 384.130 :display:gsg:glgsg(debug): GL_VERSION decoded to: 4.5 :display:gsg:glgsg(debug): GLX_VENDOR (client) = NVIDIA Corporation :display:gsg:glgsg(debug): GLX_VERSION (client) = 1.4 :display:gsg:glgsg(debug): GLX_VENDOR (server) = NVIDIA Corporation :display:gsg:glgsg(debug): GLX_VERSION (server) = 1.4 :display:gsg:glgsg(debug): GLX_VERSION = 1.4 :display:gsg:glgsg(debug): HAS EXT GLX_SGI_swap_control 1 :display:gsg:glgsg(debug): HAS EXT GLX_ARB_create_context 1 :display:glxdisplay(debug): supports_swap_control = 1 :display:glxdisplay(debug): supports_fbconfig = 1 :display:glxdisplay(debug): supports_pbuffer = 1 sgix = 0 :display:glxdisplay(debug): 0: quality=0 (pbuffer) :display:glxdisplay(debug): 1: quality=0 (pbuffer) :display:glxdisplay(debug): 2: quality=0 (pbuffer) :display:glxdisplay(debug): 3: quality=0 (pbuffer) :display:glxdisplay(debug): 4: quality=0 (pbuffer) :display:glxdisplay(debug): 5: quality=0 (pbuffer) :display:glxdisplay(debug): 6: quality=0 (pbuffer) :display:glxdisplay(debug): 7: quality=0 (pbuffer) :display:glxdisplay(debug): 8: quality=0 (pbuffer) :display:glxdisplay(debug): 9: quality=0 (pbuffer) :display:glxdisplay(debug): 10: quality=0 (pbuffer) :display:glxdisplay(debug): 11: quality=0 (pbuffer) :display:glxdisplay(debug): 12: quality=0 (pbuffer) :display:glxdisplay(debug): 13: quality=0 (pbuffer) :display:glxdisplay(debug): 14: quality=0 (pbuffer) :display:glxdisplay(debug): 15: quality=0 (pbuffer) :display:glxdisplay(debug): 16: quality=0 (pbuffer) :display:glxdisplay(debug): 17: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=96900140 (pbuffer) (pixmap) :display:glxdisplay(debug): 18: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=96900140 (pbuffer) (pixmap) :display:glxdisplay(debug): 19: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=96900140 (pbuffer) (pixmap) :display:glxdisplay(debug): 20: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=96900090 (pbuffer) (pixmap) :display:glxdisplay(debug): 21: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=96900090 (pbuffer) (pixmap) :display:glxdisplay(debug): 22: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=96900090 (pbuffer) (pixmap) :display:glxdisplay(debug): 23: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=95899948 (pbuffer) (pixmap) :display:glxdisplay(debug): 24: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=95899948 (pbuffer) (pixmap) :display:glxdisplay(debug): 25: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 force_hardware force_software quality=95899948 (pbuffer) (pixmap) :display:glxdisplay(debug): 26: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000140 (pbuffer) (pixmap) :display:glxdisplay(debug): 27: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000140 (pbuffer) (pixmap) :display:glxdisplay(debug): 28: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000140 (pbuffer) (pixmap) :display:glxdisplay(debug): 29: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000090 (pbuffer) (pixmap) :display:glxdisplay(debug): 30: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000090 (pbuffer) (pixmap) :display:glxdisplay(debug): 31: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=97000090 (pbuffer) (pixmap) :display:glxdisplay(debug): 32: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=95999948 (pbuffer) (pixmap) :display:glxdisplay(debug): 33: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=95999948 (pbuffer) (pixmap) :display:glxdisplay(debug): 34: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=95999948 (pbuffer) (pixmap) :display:glxdisplay(debug): 35: quality=0 (pbuffer) :display:glxdisplay(debug): 36: quality=0 (pbuffer) :display:glxdisplay(debug): 37: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=97900148 (pbuffer) (pixmap) :display:glxdisplay(debug): 38: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=97900148 (pbuffer) (pixmap) :display:glxdisplay(debug): 39: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=97900148 (pbuffer) (pixmap) :display:glxdisplay(debug): 40: quality=0 (pbuffer) :display:glxdisplay(debug): 41: quality=0 (pbuffer) :display:glxdisplay(debug): 42: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=97900098 (pbuffer) (pixmap) :display:glxdisplay(debug): 43: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=97900098 (pbuffer) (pixmap) :display:glxdisplay(debug): 44: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 force_hardware force_software quality=97900098 (pbuffer) (pixmap) :display:glxdisplay(debug): 45: quality=0 (pbuffer) :display:glxdisplay(debug): 46: quality=0 (pbuffer) :display:glxdisplay(debug): 47: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=96899956 (pbuffer) (pixmap) :display:glxdisplay(debug): 48: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=96899956 (pbuffer) (pixmap) :display:glxdisplay(debug): 49: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 force_hardware force_software quality=96899956 (pbuffer) (pixmap) :display:glxdisplay(debug): 50: quality=0 (pbuffer) :display:glxdisplay(debug): 51: quality=0 (pbuffer) :display:glxdisplay(debug): 52: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) (pixmap) :display:glxdisplay(debug): 53: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) (pixmap) :display:glxdisplay(debug): 54: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) (pixmap) :display:glxdisplay(debug): 55: quality=0 (pbuffer) :display:glxdisplay(debug): 56: quality=0 (pbuffer) :display:glxdisplay(debug): 57: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) (pixmap) :display:glxdisplay(debug): 58: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) (pixmap) :display:glxdisplay(debug): 59: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) (pixmap) :display:glxdisplay(debug): 60: quality=0 (pbuffer) :display:glxdisplay(debug): 61: quality=0 (pbuffer) :display:glxdisplay(debug): 62: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=96999956 (pbuffer) (pixmap) :display:glxdisplay(debug): 63: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=96999956 (pbuffer) (pixmap) :display:glxdisplay(debug): 64: srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software quality=96999956 (pbuffer) (pixmap) ... :display:glxdisplay(debug): 172: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 multisamples=8 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) :display:glxdisplay(debug): 173: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) :display:glxdisplay(debug): 174: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) :display:glxdisplay(debug): 175: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000148 (pbuffer) :display:glxdisplay(debug): 176: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) :display:glxdisplay(debug): 177: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) :display:glxdisplay(debug): 178: depth_bits=24 srgb_color color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 stencil_bits=8 accum_bits=64 multisamples=16 back_buffers=1 force_hardware force_software quality=98000098 (pbuffer) :display:glxdisplay(debug): Selected context 52: depth_bits=24 color_bits=24 red_bits=8 green_bits=8 blue_bits=8 alpha_bits=8 accum_bits=64 back_buffers=1 force_hardware force_software :display:glxdisplay(debug): context_has_pbuffer = 1, context_has_pixmap = 1 :display:x11display(debug): Raw mice not requested. :display:gsg:glgsg(debug): GL_VENDOR = NVIDIA Corporation :display:gsg:glgsg(debug): GL_RENDERER = GeForce GTX 675MX/PCIe/SSE2 :display:gsg:glgsg(debug): GL_VERSION = 4.5.0 NVIDIA 384.130 :display:gsg:glgsg(debug): GL_VERSION decoded to: 4.5 :display:gsg:glgsg(debug): GLX_VENDOR (client) = NVIDIA Corporation :display:gsg:glgsg(debug): GLX_VERSION (client) = 1.4 :display:gsg:glgsg(debug): GLX_VENDOR (server) = NVIDIA Corporation :display:gsg:glgsg(debug): GLX_VERSION (server) = 1.4 :display:gsg:glgsg(debug): GLX_VERSION = 1.4 :display:gsg:glgsg(debug): GL_SHADING_LANGUAGE_VERSION = 4.50 NVIDIA :display:gsg:glgsg(debug): Detected GLSL version: 4.50 :display:gsg:glgsg(debug): HAS EXT GL_ARB_compatibility 1 :display:gsg:glgsg(debug): Using compatibility profile
glxinfo output:
311 GLXFBConfigs: visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat ---------------------------------------------------------------------------- 0x155 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None 0x156 24 dc 0 24 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None 0x157 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None 0x158 24 dc 0 32 0 r y . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None 0x159 24 tc 0 24 0 r . . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None 0x15a 24 dc 0 24 0 r . . 8 8 8 0 . s 4 24 8 16 16 16 16 0 0 None 0x15b 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None 0x15c 24 dc 0 32 0 r . . 8 8 8 8 . s 4 24 8 16 16 16 16 0 0 None 0x15d 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None 0x15e 24 dc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None 0x15f 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None 0x160 24 dc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None 0x161 24 tc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None 0x162 24 dc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 0 0 None 0x163 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None 0x164 24 dc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 0 0 None 0x165 24 tc 0 24 0 r y . 8 8 8 0 . s 4 0 0 16 16 16 16 0 0 None 0x166 24 dc 0 24 0 r y . 8 8 8 0 . s 4 0 0 16 16 16 16 0 0 None 0x167 24 tc 0 32 0 r y . 8 8 8 8 . s 4 0 0 16 16 16 16 0 0 None 0x168 24 dc 0 32 0 r y . 8 8 8 8 . s 4 0 0 16 16 16 16 0 0 None 0x169 24 tc 0 24 0 r . . 8 8 8 0 . s 4 0 0 16 16 16 16 0 0 None 0x16a 24 dc 0 24 0 r . . 8 8 8 0 . s 4 0 0 16 16 16 16 0 0 None 0x16b 24 tc 0 32 0 r . . 8 8 8 8 . s 4 0 0 16 16 16 16 0 0 None 0x16c 24 dc 0 32 0 r . . 8 8 8 8 . s 4 0 0 16 16 16 16 0 0 None 0x16d 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 2 1 Ncon 0x16e 24 dc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 2 1 Ncon 0x16f 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 2 1 Ncon 0x170 24 dc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 2 1 Ncon 0x171 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 4 1 Ncon 0x172 24 dc 0 24 0 r y . 8 8 8 0 . s 4 24 0 16 16 16 16 4 1 Ncon 0x173 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 4 1 Ncon 0x174 24 dc 0 32 0 r y . 8 8 8 8 . s 4 24 0 16 16 16 16 4 1 Ncon 0x175 24 tc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 2 1 Ncon 0x176 24 dc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 2 1 Ncon 0x177 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 2 1 Ncon 0x178 24 dc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 2 1 Ncon 0x179 24 tc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 4 1 Ncon 0x17a 24 dc 0 24 0 r . . 8 8 8 0 . s 4 24 0 16 16 16 16 4 1 Ncon 0x17b 24 tc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 4 1 Ncon 0x17c 24 dc 0 32 0 r . . 8 8 8 8 . s 4 24 0 16 16 16 16 4 1 Ncon 0x17d 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 2 1 Ncon 0x17e 24 dc 0 24 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 2 1 Ncon 0x17f 24 tc 0 32 0 r y . 8 8 8 8 . s 4 24 8 16 16 16 16 2 1 Ncon 0x180 24 dc 0 32 0 r y . 8 8 8 8 . s 4 24 8 16 16 16 16 2 1 Ncon 0x181 24 tc 0 24 0 r y . 8 8 8 0 . s 4 24 8 16 16 16 16 4 1 Ncon .... 0x288 0 sg 0 64 0 r . . 32 32 0 0 f . 4 24 8 16 16 16 16 0 0 None 0x289 0 sg 0 64 0 . . 32 32 0 0 f . 4 24 8 16 16 16 16 0 0 None 0x28a 0 sg 0 64 0 r y . 32 32 0 0 f . 4 24 8 16 16 16 16 0 0 None 0x28b 0 sg 0 64 0 y . 32 32 0 0 f . 4 24 8 16 16 16 16 0 0 None
Here is the code used to test :
import os
from panda3d.core import Texture, TextureStage, CardMaker, Shader, load_prc_file_data, WindowProperties, FrameBufferProperties
from direct.showbase.ShowBase import ShowBase
from direct.filter.FilterManager import FilterManager
#load_prc_file_data("", "gl-version 3 2")
load_prc_file_data("", "notify-level spam")
load_prc_file_data("", "textures-power-2 none")
def shader():
return Shader.make(Shader.SL_GLSL,
vertex="""
#version 410
uniform mat4 p3d_ProjectionMatrix;
uniform mat4 p3d_ModelViewMatrix;
in vec4 p3d_Vertex;
in vec4 p3d_MultiTexCoord0;
out vec4 texcoord;
void main() {
gl_Position = p3d_ProjectionMatrix * (p3d_ModelViewMatrix * p3d_Vertex);
texcoord = p3d_MultiTexCoord0;
}
""",
fragment="""
#version 410
uniform mat4 p3d_TextureMatrix[2];
uniform sampler2D p3d_Texture0;
uniform sampler2D p3d_Texture1;
in vec4 texcoord;
out vec4 frag_color;
void main() {
vec4 texcoord_tex0 = p3d_TextureMatrix[0] * texcoord;
vec4 tex0 = texture(p3d_Texture0, texcoord_tex0.xy);
frag_color = tex0;
}
""")
def shader_final():
return Shader.make(Shader.SL_GLSL,
vertex="""
#version 410
uniform mat4 p3d_ProjectionMatrix;
uniform mat4 p3d_ModelViewMatrix;
in vec4 p3d_Vertex;
in vec4 p3d_MultiTexCoord0;
out vec4 texcoord;
void main() {
gl_Position = p3d_ProjectionMatrix * (p3d_ModelViewMatrix * p3d_Vertex);
texcoord = p3d_MultiTexCoord0;
}
""",
fragment="""
#version 410
uniform sampler2D p3d_Texture0;
in vec4 texcoord;
out vec4 frag_color;
void main() {
vec4 tex0 = texture(p3d_Texture0, texcoord.xy);
frag_color = tex0;
frag_color[0] = 1;
}
""")
base = ShowBase()
color_buffer = Texture()
aux_buffer = Texture()
textures = {'color': color_buffer, 'aux0': aux_buffer}
manager = FilterManager(base.win, base.cam)
fbprops = FrameBufferProperties(FrameBufferProperties.get_default())
fbprops.set_aux_rgba(1)
final_quad = manager.render_scene_into(textures=textures, fbprops=fbprops)
final_quad.set_shader(shader_final())
cm = CardMaker('card')
card = render.attachNewNode(cm.generate())
card.setPos(-0.5, 3, -0.5)
card.setColor(0, 1, 0, 1)
card.set_shader(shader())
tex = loader.loadTexture('maps/smiley.rgb')
ts = TextureStage('first')
card.setTexture(ts, tex)
base.run()