MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / BufferState

Class BufferState

server/BufferState.h:31–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29namespace backend
30{
31 class BufferState
32 {
33 public:
34
35 BufferState(int saveMask) : oldDrawFBO(-1), oldReadFBO(-1), oldRBO(-1),
36 oldReadBuf(-1), nOldDrawBufs(0)
37 {
38 for(int i = 0; i < 16; i++) oldDrawBufs[i] = GL_NONE;
39
40 if(saveMask & BS_DRAWFBO)
41 _glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &oldDrawFBO);
42 if(saveMask & BS_READFBO)
43 _glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &oldReadFBO);
44 if(saveMask & BS_RBO)
45 _glGetIntegerv(GL_RENDERBUFFER_BINDING, &oldRBO);
46 if(saveMask & BS_DRAWBUFS)
47 {
48 GLint maxDrawBufs = 16;
49 _glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBufs);
50 if(maxDrawBufs > 16) maxDrawBufs = 16;
51 for(int i = 0; i < maxDrawBufs; i++)
52 {
53 GLint drawBuf = GL_NONE;
54 _glGetIntegerv(GL_DRAW_BUFFER0 + i, &drawBuf);
55 if(drawBuf != GL_NONE)
56 oldDrawBufs[nOldDrawBufs++] = drawBuf;
57 }
58 }
59 if(saveMask & BS_READBUF)
60 _glGetIntegerv(GL_READ_BUFFER, &oldReadBuf);
61 }
62
63 GLint getOldReadFBO() { return oldReadFBO; }
64
65 ~BufferState(void)
66 {
67 if(oldDrawFBO >= 0)
68 _glBindFramebuffer(GL_DRAW_FRAMEBUFFER, oldDrawFBO);
69 if(oldReadFBO >= 0)
70 _glBindFramebuffer(GL_READ_FRAMEBUFFER, oldReadFBO);
71 if(oldRBO >= 0) _glBindRenderbuffer(GL_RENDERBUFFER, oldRBO);
72 if(nOldDrawBufs > 0) _glDrawBuffers(nOldDrawBufs, oldDrawBufs);
73 if(oldReadBuf >= 0) _glReadBuffer(oldReadBuf);
74 }
75
76 private:
77
78 GLint oldDrawFBO, oldReadFBO, oldRBO, oldReadBuf;
79 GLsizei nOldDrawBufs;
80 GLenum oldDrawBufs[16];
81 };
82}
83
84#endif // __BUFFERSTATE_H__

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected