void draw(vec3d camera_position, vec3d light_position) { ALLEGRO_STATE previous_state; ALLEGRO_TRANSFORM transform; if (shader && shader_applies_transform) { // construct our entity's transform place.build_transform(&transform); // Now apply it to the shader shader->use(); Shader::set_vec3("camera_position", camera_position); Shader::set_vec3("light_position", light_position); Shader::set_mat4("position_transform", &transform); Shader::set_bool("reflecting", cube_map_reflecting); Shader::set_sampler("diffuse_texture", diffuse_texture, 2); Shader::set_sampler("specular_texture", specular_texture, 3); Shader::set_sampler("normal_texture", normal_texture, 4); Shader::set_sampler_cube("cube_map_A", cube_map_A, 5); Shader::set_sampler_cube("cube_map_B", cube_map_B, 6); } else { // when not using the shader, we'll need to // apply the transform directly here al_store_state(&previous_state, ALLEGRO_STATE_TRANSFORM); al_identity_transform(&transform); al_use_transform(&transform); place.start_transform(); // also, we set the texture on this model directly if (diffuse_texture) model->set_texture(diffuse_texture); } // actually draw our model here if (model) model->draw(); if (shader && shader_applies_transform) { Shader::stop(); } else { place.restore_transform(); al_restore_state(&previous_state); } }
void ViewportWidget::paintGL(QGLPainter *painter) { if (!_models) return; glEnable(GL_BLEND); glEnable (GL_LINE_SMOOTH); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE); /* Draw the background video */ drawVideoFrame(painter); /* Draw the models on top of the video */ glEnable(GL_DEPTH_TEST); QListIterator<Model3D*> i(*_models); while(i.hasNext()) { Model3D *model = i.next(); model->draw(painter); } glDisable(GL_DEPTH_TEST); glDisable (GL_LINE_SMOOTH); glDisable(GL_BLEND); }
virtual void draw() { if (!model) return; model->set_texture(texture); model->draw(); }