git-svn-id: svn://db.shs.com.ru/libs@605 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -31,6 +31,7 @@ QGLView::QGLView(): OpenGLWindow(), fbo_selection(3) {
|
||||
// setScene(new QGraphicsScene());
|
||||
// setInteractive(true);
|
||||
setIcon(QIcon("://icons/qglview.png"));
|
||||
deleting_ = false;
|
||||
timer = 0;
|
||||
need_init_ = is_first_draw = true;
|
||||
objects_.is_root = true;
|
||||
@@ -106,6 +107,7 @@ QGLView::~QGLView() {
|
||||
stop();
|
||||
if (shader_select) delete shader_select;
|
||||
if (shader_halo) delete shader_halo;
|
||||
deleting_ = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -344,12 +346,14 @@ void QGLView::render() {
|
||||
renderer_->renderScene();
|
||||
}
|
||||
emit glPainting();
|
||||
glUseProgram(0);
|
||||
if (selectionHalo_ || hoverHalo_) {
|
||||
glReleaseTextures();
|
||||
glUseProgram(0);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
//glClearFramebuffer(Qt::black, false);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_TEXTURE_CUBE_MAP);
|
||||
glDisable(GL_LIGHTING);
|
||||
@@ -363,13 +367,20 @@ void QGLView::render() {
|
||||
if (hoverHalo_ && hov_obj) {
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture(1));
|
||||
//qDebug() << "draw hover";
|
||||
//glBindTexture(GL_TEXTURE_2D, textures_manager->loadTexture("batt_pn.jpg"));
|
||||
glDrawQuad();
|
||||
}
|
||||
}
|
||||
|
||||
glUseProgram(0);
|
||||
glResetAllTransforms();
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
glUseProgram(0);
|
||||
|
||||
//glDisable(GL_BLEND);
|
||||
//glDisable(GL_LIGHTING);
|
||||
//glActiveTexture(GL_TEXTURE0);
|
||||
//glBindTexture(GL_TEXTURE_2D, textures_manager->loadTexture("batt_pn.jpg"));
|
||||
//glDrawQuad();
|
||||
|
||||
emit glEndPaint();
|
||||
|
||||
@@ -457,20 +468,21 @@ void QGLView::renderHalo(const GLObjectBase * obj, const uint iid, const QColor
|
||||
if (!shader_halo) return;
|
||||
if (!shader_halo->isLinked()) return;
|
||||
if (obj) {
|
||||
shader_halo->bind();
|
||||
shader_halo->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glBindTexture(GL_TEXTURE_2D, fbo_selection.colorTexture());
|
||||
shader_halo->bind();
|
||||
shader_halo->setUniformValue("qgl_ModelViewProjectionMatrix", QMatrix4x4());
|
||||
shader_halo->setUniformValue("t0", 0);
|
||||
shader_halo->setUniformValue("dt", QVector2D(1.f / width(), 1.f / height()));
|
||||
shader_halo->setUniformValue("selected", QVector4D(float((iid >> 24) & 0xFF) / 255.f,
|
||||
float((iid >> 16) & 0xFF) / 255.f,
|
||||
float((iid >> 8) & 0xFF) / 255.f,
|
||||
float(iid & 0xFF) / 255.f));
|
||||
float((iid >> 16) & 0xFF) / 255.f,
|
||||
float((iid >> 8) & 0xFF) / 255.f,
|
||||
float( iid & 0xFF) / 255.f));
|
||||
shader_halo->setUniformValue("color", color);
|
||||
shader_halo->setUniformValue("fill", GLfloat(fill));
|
||||
//qDebug() << "render halo" << iid << shader_halo->log() << shader_halo->programId();
|
||||
glDisableDepth();
|
||||
//glClearFramebuffer(color);
|
||||
glDrawQuad(shader_halo);
|
||||
glDepthMask(GL_TRUE);
|
||||
//glFlush();
|
||||
@@ -545,9 +557,11 @@ void QGLView::collectLights() {
|
||||
|
||||
|
||||
void QGLView::objectDeleted(GLObjectBase * o) {
|
||||
if (deleting_) return;
|
||||
//qDebug() << "del" << o;
|
||||
if (sel_obj == o) selectObject(nullptr);
|
||||
if (hov_obj == o) hov_obj = nullptr;
|
||||
collectLights();
|
||||
}
|
||||
|
||||
|
||||
@@ -590,8 +604,8 @@ void QGLView::checkCaps() {
|
||||
|
||||
void QGLView::reloadThisShaders() {
|
||||
if (!shaders_supported) return;
|
||||
loadShaders(shader_select, "selection", "://shaders");
|
||||
loadShaders(shader_halo, "selection_halo", "://shaders");
|
||||
loadShaders(shader_select, "selection", "shaders");
|
||||
loadShaders(shader_halo, "selection_halo", "shaders");
|
||||
//loadShaders(shader_rope, "rope", "://shaders");
|
||||
}
|
||||
|
||||
@@ -789,6 +803,7 @@ QByteArray QGLView::saveCamera() {
|
||||
|
||||
void QGLView::restoreCamera(const QByteArray &ba) {
|
||||
if (ba.isEmpty()) return;
|
||||
qDebug() << "restoreCamera" << ba.size();
|
||||
ChunkStream cs(ba);
|
||||
QVector3D pos, aim, ang;
|
||||
while (!cs.atEnd()) {
|
||||
|
||||
Reference in New Issue
Block a user