src/gl/partrenderer.cpp

changeset 37
90443fb328ea
parent 35
98906a94732f
child 39
caac957e9834
equal deleted inserted replaced
36:bbb901b97404 37:90443fb328ea
101 void PartRenderer::renderScene() 101 void PartRenderer::renderScene()
102 { 102 {
103 glClearColor(0.8f, 0.8f, 0.8f, 1.0f); 103 glClearColor(0.8f, 0.8f, 0.8f, 1.0f);
104 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 104 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
105 glEnable(GL_DEPTH_TEST); 105 glEnable(GL_DEPTH_TEST);
106 glEnable(GL_LIGHTING);
107 glEnable(GL_POLYGON_OFFSET_FILL); 106 glEnable(GL_POLYGON_OFFSET_FILL);
108 glPolygonOffset(1.0f, 1.0f); 107 glPolygonOffset(1.0f, 1.0f);
109 switch (this->renderStyle) 108 switch (this->renderStyle)
110 { 109 {
111 case gl::RenderStyle::Normal: 110 case gl::RenderStyle::Normal:
111 this->setFragmentStyle(gl::FragmentStyle::Normal);
112 this->renderAllArrays();
113 break;
112 case gl::RenderStyle::BfcRedGreen: 114 case gl::RenderStyle::BfcRedGreen:
115 glEnable(GL_CULL_FACE);
116 glCullFace(GL_BACK);
117 this->setFragmentStyle(gl::FragmentStyle::BfcGreen);
118 renderVao(gl::ArrayClass::Triangles);
119 renderVao(gl::ArrayClass::Quads);
120 glCullFace(GL_FRONT);
121 this->setFragmentStyle(gl::FragmentStyle::BfcRed);
122 renderVao(gl::ArrayClass::Triangles);
123 renderVao(gl::ArrayClass::Quads);
124 glDisable(GL_CULL_FACE);
125 this->setFragmentStyle(gl::FragmentStyle::Normal);
126 renderVao(gl::ArrayClass::Lines);
113 case gl::RenderStyle::RandomColors: 127 case gl::RenderStyle::RandomColors:
128 this->setFragmentStyle(gl::FragmentStyle::RandomColors);
129 this->renderAllArrays();
114 break; 130 break;
115 case gl::RenderStyle::Wireframe: 131 case gl::RenderStyle::Wireframe:
116 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 132 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
133 this->setFragmentStyle(gl::FragmentStyle::Normal);
134 this->renderAllArrays();
117 break; 135 break;
118 } 136 }
137 glDisable(GL_POLYGON_OFFSET_FILL);
138 }
139
140 void PartRenderer::renderAllArrays()
141 {
119 // Lines need to be rendered last so that anti-aliasing does not interfere with polygon rendering. 142 // Lines need to be rendered last so that anti-aliasing does not interfere with polygon rendering.
120 renderVao(gl::ArrayClass::Triangles); 143 renderVao(gl::ArrayClass::Triangles);
121 renderVao(gl::ArrayClass::Quads); 144 renderVao(gl::ArrayClass::Quads);
122 renderVao(gl::ArrayClass::Lines); 145 renderVao(gl::ArrayClass::Lines);
123 glDisable(GL_POLYGON_OFFSET_FILL); 146 }
124 } 147
125 148
126 void PartRenderer::updateViewMatrix() 149 void PartRenderer::updateViewMatrix()
127 { 150 {
128 // I'm not quite sure why using the exponent function on the zoom factor causes linear zoom behavior 151 // I'm not quite sure why using the exponent function on the zoom factor causes linear zoom behavior
129 const double z = 2 * std::exp(this->zoom) * (1 + this->compiler->modelDistance()); 152 const double z = 2 * std::exp(this->zoom) * (1 + this->compiler->modelDistance());
186 this->zoom = std::clamp(this->zoom + move, MIN_ZOOM, MAX_ZOOM); 209 this->zoom = std::clamp(this->zoom + move, MIN_ZOOM, MAX_ZOOM);
187 this->updateViewMatrix(); 210 this->updateViewMatrix();
188 this->update(); 211 this->update();
189 } 212 }
190 213
214 /**
215 * @brief Changes the color of rendered fragments
216 * @param newFragmentStyle new fragment style to use
217 */
218 void PartRenderer::setFragmentStyle(gl::FragmentStyle newFragmentStyle)
219 {
220 this->compiler->setUniform("fragmentStyle", static_cast<int>(newFragmentStyle));
221 }
222
223 /**
224 * @brief Changes the way the scene is rendered
225 * @param newStyle new render style to use
226 */
191 void PartRenderer::setRenderStyle(const gl::RenderStyle newStyle) 227 void PartRenderer::setRenderStyle(const gl::RenderStyle newStyle)
192 { 228 {
193 this->renderStyle = newStyle; 229 this->renderStyle = newStyle;
194 this->update(); 230 this->update();
195 } 231 }

mercurial