git-svn-id: svn://db.shs.com.ru/libs@605 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2019-10-07 15:51:43 +00:00
parent 8556e28984
commit c0c11def52
21 changed files with 748 additions and 612 deletions

View File

@@ -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()) {