Buffer fixes and bug fixes

This commit is contained in:
Josh Yelon 2008-03-04 07:00:23 +00:00
parent 9dd90b0e8b
commit b4427c874d
6 changed files with 32 additions and 25 deletions

View File

@ -198,15 +198,6 @@ public:
virtual bool begin_frame(FrameMode mode, Thread *current_thread);
virtual void end_frame(FrameMode mode, Thread *current_thread);
// These entry points have been removed. Use begin_frame/end_frame instead.
// virtual void begin_render_texture();
// virtual void end_render_texture();
// INLINE bool needs_context() const;
// bool _needs_context;
// virtual bool make_context();
// virtual void make_current();
// virtual void auto_resize();
void change_scenes(DisplayRegionPipelineReader *new_dr);
virtual void select_cube_map(int cube_map_index);

View File

@ -692,7 +692,11 @@ reset() {
has_extension("GL_ARB_fragment_program_shadow")) {
_supports_shadow_filter = true;
}
if (_gl_vendor.substr(0,3)=="ATI") {
// ATI drivers have never provided correct shadow support.
_supports_shadow_filter = false;
}
_supports_texture_combine =
has_extension("GL_ARB_texture_env_combine") || is_at_least_version(1, 3);
_supports_texture_saved_result =

View File

@ -95,7 +95,11 @@ begin_frame(FrameMode mode, Thread *current_thread) {
glxgsg->reset_if_new();
if (mode == FM_render) {
// begin_render_texture();
for (int i=0; i<count_textures(); i++) {
if (get_rtm_mode(i) == RTM_bind_or_copy) {
_textures[i]._rtm_mode = RTM_copy_texture;
}
}
clear_cube_map_selection();
}
@ -116,7 +120,6 @@ end_frame(FrameMode mode, Thread *current_thread) {
nassertv(_gsg != (GraphicsStateGuardian *)NULL);
if (mode == FM_render) {
// end_render_texture();
copy_to_textures();
}

View File

@ -75,7 +75,11 @@ begin_frame(FrameMode mode, Thread *current_thread) {
mesagsg->reset_if_new();
if (mode == FM_render) {
// begin_render_texture();
for (int i=0; i<count_textures(); i++) {
if (get_rtm_mode(i) == RTM_bind_or_copy) {
_textures[i]._rtm_mode = RTM_copy_texture;
}
}
clear_cube_map_selection();
}
_gsg->set_current_properties(&get_fb_properties());
@ -95,7 +99,6 @@ end_frame(FrameMode mode, Thread *current_thread) {
nassertv(_gsg != (GraphicsStateGuardian *)NULL);
if (mode == FM_render) {
// end_render_texture();
copy_to_textures();
}

View File

@ -80,7 +80,11 @@ begin_frame(FrameMode mode, Thread *current_thread) {
if (mode == FM_render)
{
// begin_render_texture();
for (int i=0; i<count_textures(); i++) {
if (get_rtm_mode(i) == RTM_bind_or_copy) {
_textures[i]._rtm_mode = RTM_copy_texture;
}
}
clear_cube_map_selection();
}
_gsg->set_current_properties(&get_fb_properties());
@ -101,7 +105,6 @@ end_frame(FrameMode mode, Thread *current_thread) {
if (mode == FM_render)
{
// end_render_texture();
copy_to_textures();
}

View File

@ -95,6 +95,13 @@ begin_frame(FrameMode mode, Thread *current_thread) {
&_make_current_pcollector);
if (mode == FM_render) {
for (int i=0; i<count_textures(); i++) {
if (get_texture_plane(i) != RTP_color) {
if (get_rtm_mode(i) == RTM_bind_or_copy) {
_textures[i]._rtm_mode = RTM_copy_texture;
}
}
}
clear_cube_map_selection();
}
@ -115,8 +122,8 @@ end_frame(FrameMode mode, Thread *current_thread) {
nassertv(_gsg != (GraphicsStateGuardian *)NULL);
if (mode == FM_render) {
bind_texture_to_pbuffer();
copy_to_textures();
bind_texture_to_pbuffer();
}
_gsg->end_frame(current_thread);
@ -146,16 +153,12 @@ bind_texture_to_pbuffer() {
int tex_index = -1;
for (int i=0; i<count_textures(); i++) {
if (get_rtm_mode(i) == RTM_bind_or_copy) {
if ((get_texture(i)->get_format() != Texture::F_depth_stencil)&&
(tex_index < 0)) {
tex_index = i;
} else {
_textures[i]._rtm_mode = RTM_copy_texture;
}
if (get_texture_plane(i) == RTP_color) {
tex_index = i;
break;
}
}
if (tex_index >= 0) {
Texture *tex = get_texture(tex_index);
if ((_pbuffer_bound != 0)&&(_pbuffer_bound != tex)) {