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

This commit is contained in:
2017-10-03 12:20:32 +00:00
parent b46b9329f3
commit 7ad19d72c5
40 changed files with 320 additions and 712 deletions

View File

@@ -23,9 +23,18 @@ QGLView::QGLView(QWidget * parent): QGraphicsView(parent), fbo_selection(3) {
setFrameShape(QFrame::NoFrame);
setViewportUpdateMode(FullViewportUpdate);
setCacheMode(CacheNone);
__GLWidget__ * _w;
#if QT_VERSION >= 0x050600
_w = new __GLWidget__();
QSurfaceFormat f = _w->format();
f.setSamples(8);
_w->setFormat(f);
#else
QGLFormat f(QGL::DoubleBuffer | QGL::DepthBuffer | QGL::Rgba | QGL::AlphaChannel | QGL::DirectRendering | QGL::SampleBuffers);
f.setSwapInterval(1);
setViewport(new QGLWidget(f));
_w = new __GLWidget__(f);
#endif
setViewport(_w);
setMouseTracking(true);
setFocusPolicy(Qt::WheelFocus);
setScene(new QGraphicsScene());
@@ -156,7 +165,10 @@ void QGLView::drawBackground(QPainter * painter, const QRectF & rect) {
void QGLView::initializeGL() {
//qDebug() << "init glview";
makeCurrent();
currentQGLView = (QGLWidget * )viewport();
#if QT_VERSION >= 0x050600
initializeOpenGLFunctions();
#endif
currentQGLView = (__GLWidget__ * )viewport();
currentGLTextureManager = &textures_manager;
currentCamera = &camera();
glEnable(GL_TEXTURE_MAX_ANISOTROPY_EXT);
@@ -184,9 +196,9 @@ void QGLView::initializeGL() {
objects_.initInternal();
checkCaps();
shader_select = new QGLShaderProgram(context());
shader_halo = new QGLShaderProgram(context());
//shader_rope = new QGLShaderProgram(context());
shader_select = new __GLShaderProgram__(context());
shader_halo = new __GLShaderProgram__(context());
//shader_rope = new __GLShaderProgram__(context());
reloadThisShaders();
is_init = true;
resizeGL(viewport()->width(), viewport()->height());
@@ -483,7 +495,7 @@ void QGLView::checkCaps() {
//glGetIntegerv(GL_MAX_TEXTURE_UNITS, &max_texture_chanels);
//qDebug() << max_texture_chanels;
//qDebug() << max_texture_chanels;
shaders_supported = QGLShaderProgram::hasOpenGLShaderPrograms();
shaders_supported = __GLShaderProgram__::hasOpenGLShaderPrograms();
}
@@ -540,7 +552,11 @@ void QGLView::mouseReleaseEvent(QMouseEvent * e) {
void QGLView::mousePressEvent(QMouseEvent * e) {
QGraphicsView::mousePressEvent(e);
mouseThis_ = (scene()->itemAt(mapToScene(e->pos())) == 0);
mouseThis_ = (scene()->itemAt(mapToScene(e->pos())
#if QT_VERSION >= 0x050000
, QTransform()
#endif
) == 0);
selecting_ = false;
if (!mouseThis_) return;
/// TODO select by rect
@@ -616,7 +632,11 @@ void QGLView::mouseMoveEvent(QMouseEvent * e) {
void QGLView::wheelEvent(QWheelEvent * e) {
QGraphicsView::wheelEvent(e);
if (scene()->itemAt(mapToScene(e->pos())) != 0) return;
if (scene()->itemAt(mapToScene(e->pos())
#if QT_VERSION >= 0x050000
, QTransform()
#endif
) != 0) return;
if (mouseRotate_) {
if (e->delta() > 0) camera().flyCloser(0.1); //camera().pos.setZ(camera().pos.z() - 0.1 * camera().pos.z());
if (e->delta() < 0) camera().flyFarer(0.1); //camera().pos.setZ(camera().pos.z() + 0.1 * camera().pos.z());