mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
render-to-cube-map
This commit is contained in:
parent
6b84223f19
commit
dc9d3fd09e
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
TypeHandle wglGraphicsBuffer::_type_handle;
|
TypeHandle wglGraphicsBuffer::_type_handle;
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: wglGraphicsBuffer::Constructor
|
// Function: wglGraphicsBuffer::Constructor
|
||||||
// Access: Public
|
// Access: Public
|
||||||
@ -88,6 +89,36 @@ begin_frame() {
|
|||||||
return GraphicsBuffer::begin_frame();
|
return GraphicsBuffer::begin_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: wglGraphicsBuffer::select_cube_map
|
||||||
|
// Access: Public, Virtual
|
||||||
|
// Description: Called internally when the window is in
|
||||||
|
// render-to-a-texture mode and we are in the process of
|
||||||
|
// rendering the six faces of a cube map. This should
|
||||||
|
// do whatever needs to be done to switch the buffer to
|
||||||
|
// the indicated face.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void wglGraphicsBuffer::
|
||||||
|
select_cube_map(int cube_map_index) {
|
||||||
|
wglGraphicsStateGuardian *wglgsg;
|
||||||
|
DCAST_INTO_V(wglgsg, _gsg);
|
||||||
|
|
||||||
|
nassertv(wglgsg->_wglSetPbufferAttribARB != NULL);
|
||||||
|
|
||||||
|
static const int max_attrib_list = 64;
|
||||||
|
int iattrib_list[max_attrib_list];
|
||||||
|
int ni = 0;
|
||||||
|
|
||||||
|
iattrib_list[ni++] = WGL_CUBE_MAP_FACE_ARB;
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cube_map_index;
|
||||||
|
|
||||||
|
// Terminate the list.
|
||||||
|
nassertv(ni <= max_attrib_list);
|
||||||
|
iattrib_list[ni] = 0;
|
||||||
|
|
||||||
|
wglgsg->_wglSetPbufferAttribARB(_pbuffer, iattrib_list);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: wglGraphicsBuffer::make_current
|
// Function: wglGraphicsBuffer::make_current
|
||||||
// Access: Public, Virtual
|
// Access: Public, Virtual
|
||||||
@ -293,6 +324,8 @@ make_pbuffer(HDC twindow_dc) {
|
|||||||
int ni = 0;
|
int ni = 0;
|
||||||
|
|
||||||
if (_rtm_mode == RTM_bind_texture) {
|
if (_rtm_mode == RTM_bind_texture) {
|
||||||
|
nassertr(_texture != (Texture *)NULL, false);
|
||||||
|
|
||||||
if (_gsg->get_properties().get_frame_buffer_mode() & FrameBufferProperties::FM_alpha) {
|
if (_gsg->get_properties().get_frame_buffer_mode() & FrameBufferProperties::FM_alpha) {
|
||||||
iattrib_list[ni++] = WGL_TEXTURE_FORMAT_ARB;
|
iattrib_list[ni++] = WGL_TEXTURE_FORMAT_ARB;
|
||||||
iattrib_list[ni++] = WGL_TEXTURE_RGBA_ARB;
|
iattrib_list[ni++] = WGL_TEXTURE_RGBA_ARB;
|
||||||
@ -300,8 +333,27 @@ make_pbuffer(HDC twindow_dc) {
|
|||||||
iattrib_list[ni++] = WGL_TEXTURE_FORMAT_ARB;
|
iattrib_list[ni++] = WGL_TEXTURE_FORMAT_ARB;
|
||||||
iattrib_list[ni++] = WGL_TEXTURE_RGB_ARB;
|
iattrib_list[ni++] = WGL_TEXTURE_RGB_ARB;
|
||||||
}
|
}
|
||||||
iattrib_list[ni++] = WGL_TEXTURE_TARGET_ARB;
|
|
||||||
iattrib_list[ni++] = WGL_TEXTURE_2D_ARB;
|
if (_texture->uses_mipmaps()) {
|
||||||
|
iattrib_list[ni++] = WGL_MIPMAP_TEXTURE_ARB;
|
||||||
|
iattrib_list[ni++] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (_texture->get_texture_type()) {
|
||||||
|
case Texture::TT_cube_map:
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_TARGET_ARB;
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_CUBE_MAP_ARB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Texture::TT_1d_texture:
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_TARGET_ARB;
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_1D_ARB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_TARGET_ARB;
|
||||||
|
iattrib_list[ni++] = WGL_TEXTURE_2D_ARB;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terminate the list.
|
// Terminate the list.
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
virtual ~wglGraphicsBuffer();
|
virtual ~wglGraphicsBuffer();
|
||||||
|
|
||||||
virtual bool begin_frame();
|
virtual bool begin_frame();
|
||||||
|
virtual void select_cube_map(int cube_map_index);
|
||||||
|
|
||||||
virtual void make_current();
|
virtual void make_current();
|
||||||
virtual void release_gsg();
|
virtual void release_gsg();
|
||||||
|
@ -87,7 +87,7 @@ framebuffer_bind_to_texture(GraphicsOutput *win, Texture *tex) {
|
|||||||
TextureContext *tc = tex->prepare_now(get_prepared_objects(), this);
|
TextureContext *tc = tex->prepare_now(get_prepared_objects(), this);
|
||||||
nassertr(tc != (TextureContext *)NULL, false);
|
nassertr(tc != (TextureContext *)NULL, false);
|
||||||
bind_texture(tc);
|
bind_texture(tc);
|
||||||
|
|
||||||
if (get_properties().is_single_buffered()) {
|
if (get_properties().is_single_buffered()) {
|
||||||
_wglBindTexImageARB(buffer->_pbuffer, WGL_FRONT_LEFT_ARB);
|
_wglBindTexImageARB(buffer->_pbuffer, WGL_FRONT_LEFT_ARB);
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user