30 const std::string &name,
36 GraphicsBuffer(engine, pipe, name, fb_prop, win_prop, flags, gsg, host)
39 DCAST_INTO_V(glx_pipe, _pipe);
45 _screenshot_buffer_type = _draw_buffer_type;
52 ~glxGraphicsBuffer() {
53 nassertv(_pbuffer == None);
64 PStatTimer timer(_make_current_pcollector, current_thread);
66 begin_frame_spam(mode);
67 if (_gsg ==
nullptr ||
73 DCAST_INTO_R(glxgsg, _gsg,
false);
76 glXMakeCurrent(_display, _pbuffer, glxgsg->_context);
83 glxgsg->reset_if_new();
85 if (mode == FM_render) {
87 for (
size_t i = 0; i != cdata->_textures.size(); ++i) {
88 const RenderTexture &rt = cdata->_textures[i];
89 RenderTextureMode rtm_mode = rt._rtm_mode;
90 if (rtm_mode == RTM_bind_or_copy) {
91 CDWriter cdataw(_cycler, cdata,
false);
92 nassertr(cdata->_textures.size() == cdataw->_textures.size(),
false);
93 cdataw->_textures[i]._rtm_mode = RTM_copy_texture;
96 clear_cube_map_selection();
100 return _gsg->begin_frame(current_thread);
110 end_frame_spam(mode);
111 nassertv(_gsg !=
nullptr);
113 if (mode == FM_render) {
117 _gsg->end_frame(current_thread);
119 if (mode == FM_render) {
121 clear_cube_map_selection();
128 void glxGraphicsBuffer::
130 if (_gsg !=
nullptr) {
132 glXMakeCurrent(_display, None,
nullptr);
134 if (_pbuffer != None) {
136 DCAST_INTO_V(glxgsg, _gsg);
137 glxgsg->_glXDestroyPbuffer(_display, _pbuffer);
152 bool glxGraphicsBuffer::
155 DCAST_INTO_R(glx_pipe, _pipe,
false);
159 if (_gsg ==
nullptr) {
167 DCAST_INTO_R(glxgsg, _gsg,
false);
169 if (!glxgsg->_context_has_pbuffer ||
178 if (glxgsg->_fbconfig == None || !glxgsg->_context_has_pbuffer) {
184 nassertr(glxgsg->_supports_pbuffer,
false);
188 static const int max_attrib_list = 32;
189 int attrib_list[max_attrib_list];
192 if (glxgsg->_uses_sgix_pbuffer) {
194 nassertr(n < max_attrib_list,
false);
195 attrib_list[n] = (int)None;
196 _pbuffer = glxgsg->_glXCreateGLXPbufferSGIX(glxgsg->_display, glxgsg->_fbconfig,
200 attrib_list[n++] = GLX_PBUFFER_WIDTH;
202 attrib_list[n++] = GLX_PBUFFER_HEIGHT;
205 nassertr(n < max_attrib_list,
false);
206 attrib_list[n] = (int)None;
207 _pbuffer = glxgsg->_glXCreatePbuffer(glxgsg->_display, glxgsg->_fbconfig,
211 if (_pbuffer == None) {
212 glxdisplay_cat.error()
213 <<
"failed to create GLX pbuffer.\n";
217 glXMakeCurrent(_display, _pbuffer, glxgsg->_context);
218 glxgsg->reset_if_new();
219 if (!glxgsg->is_valid()) {
224 (_fb_properties, glxgsg->get_gl_renderer())) {