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

Method createBuffer

server/FakePbuffer.cpp:75–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73
74
75void FakePbuffer::createBuffer(bool useRBOContext, bool ignoreReadDrawBufs,
76 bool ignoreDrawFBO, bool ignoreReadFBO)
77{
78 TempContextEGL *tc = NULL;
79 BufferState *bs = NULL;
80
81 CriticalSection::SafeLock l(RBOCONTEXT.getMutex());
82
83 try
84 {
85 if(useRBOContext)
86 tc = new TempContextEGL(RBOCONTEXT.getContext());
87 else
88 {
89 int saveMask = BS_RBO;
90 if(!ignoreReadDrawBufs) saveMask |= BS_DRAWBUFS | BS_READBUF;
91 if(!ignoreDrawFBO) saveMask |= BS_DRAWFBO;
92 if(!ignoreReadFBO) saveMask |= BS_READFBO;
93
94 bs = new BufferState(saveMask);
95 }
96
97 TRY_GL();
98 if(fbo) _glDeleteFramebuffers(1, &fbo);
99 _glGenFramebuffers(1, &fbo);
100 _glBindFramebuffer(GL_FRAMEBUFFER, fbo);
101 // 0 = front left, 1 = back left, 2 = front right, 3 = back right
102 for(int i = 0; i < 2 * (!!config->attr.stereo + 1);
103 i += (1 - !!config->attr.doubleBuffer + 1))
104 {
105 if(!rboc[i])
106 {
107 GLenum internalFormat = GL_SRGB8;
108 if(config->attr.redSize > 8) internalFormat = GL_RGB10_A2;
109 else if(config->attr.alphaSize) internalFormat = GL_SRGB8_ALPHA8;
110
111 _glGenRenderbuffers(1, &rboc[i]);
112 _glBindRenderbuffer(GL_RENDERBUFFER, rboc[i]);
113 if(config->attr.samples > 1)
114 _glRenderbufferStorageMultisample(GL_RENDERBUFFER,
115 config->attr.samples, internalFormat, width, height);
116 else
117 _glRenderbufferStorage(GL_RENDERBUFFER, internalFormat, width,
118 height);
119 }
120 else _glBindRenderbuffer(GL_RENDERBUFFER, rboc[i]);
121 _glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
122 GL_RENDERBUFFER, rboc[i]);
123 }
124 if(config->attr.stencilSize || config->attr.depthSize)
125 {
126 if(!rbod)
127 {
128 GLenum internalFormat = GL_DEPTH_COMPONENT24;
129 if(config->attr.stencilSize && config->attr.depthSize)
130 internalFormat = GL_DEPTH24_STENCIL8;
131 else if(config->attr.stencilSize)
132 internalFormat = GL_STENCIL_INDEX8;

Callers 1

makeCurrentFunction · 0.80

Calls 2

getContextMethod · 0.80
printMethod · 0.45

Tested by

no test coverage detected