Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL错误仅在未经调试的情况下运行时出现,怎么可能?_C++_Visual Studio 2010_Opengl - Fatal编程技术网

C++ OpenGL错误仅在未经调试的情况下运行时出现,怎么可能?

C++ OpenGL错误仅在未经调试的情况下运行时出现,怎么可能?,c++,visual-studio-2010,opengl,C++,Visual Studio 2010,Opengl,我在编写一个小型OpenGL应用程序时遇到了一个奇怪的错误。当我在VisualStudio中使用F5(带调试)运行应用程序时,它运行得很好。如果我使用Ctrl+F5(不带调试)运行它,它将以0 FPS的速度运行。在这两种情况下,我都使用VisualStudio中的“发布”构建 怎么可能呢运行程序的两种方法有什么不同吗?应该修改程序的运行吗?这是一个疯狂的错误,不知怎么连接到AntTweakBar并绘制大量对象+nVidia OpenGL驱动程序 以下是程序的源代码(非常小): #包括“cinde

我在编写一个小型OpenGL应用程序时遇到了一个奇怪的错误。当我在VisualStudio中使用F5(带调试)运行应用程序时,它运行得很好。如果我使用Ctrl+F5(不带调试)运行它,它将以0 FPS的速度运行。在这两种情况下,我都使用VisualStudio中的“发布”构建

怎么可能呢运行程序的两种方法有什么不同吗?应该修改程序的运行吗?这是一个疯狂的错误,不知怎么连接到AntTweakBar并绘制大量对象+nVidia OpenGL驱动程序

以下是程序的源代码(非常小):

#包括“cinder/app/AppBasic.h”
#包括“炉渣/gl/gl.h”
#包括“煤渣/参数/参数h”
#包括“煤渣/兰特h”
#包括“煤渣/照相机.h”
使用名称空间ci;
使用名称空间ci::app;
使用名称空间std;
类参数s_slowApp:public-AppBasic
{
公众:
无效设置();
无效更新();
无效抽取();
作废准备设置(设置*设置);
CameraPersp mCam;
参数::接口EGL MPARMS;
};
void params_slowApp::准备设置(设置*设置)
{
设置->设置窗口大小(1280720);
设置->设置帧率(300);
}
void params_slowApp::setup()
{
gl::enableVerticalSync(假);
gl::enableAlphaBlending();
mCam.setPerspective(45.0f,getWindowAspectRatio(),5.0f,300000.0f);
lookAt(Vec3f::zero(),-Vec3f::zAxis(),Vec3f::yAxis());
mParams=params::interfaceegl(“控制”,Vec2i(200300));
mParams.addText(“文本”);
}
void params_slowApp::update()
{
}
void params_slowApp::draw()
{
gl::清除(颜色(0,0,0),真);
gl::PushMatrix();
gl::SetMatrix(mCam);
gl::enableDepthRead();
gl::enableDepthWrite();
对于(int i=0;i<10000;i++)
{
glColor4f(randFloat(),0.2,0.3,0.4);
{
gl::pushModelView();
gl::translate(randFloat(-100100),randFloat(-100100),randFloat(-10,-100));
gl::drawCube(Vec3f::zero(),Vec3f::one());
gl::popModelView();
}
}
gl::disableDepthWrite();
gl::disableDepthRead();
gl::PopMatrix();
params::InterfaceGl::draw();
}
煤渣应用程序基本(参数slowApp,渲染器)
我正在使用该框架,如果我执行以下任一操作,程序将以全速(100 FPS)而不是0 FPS运行:

  • 从AntTweakBar
    mParams.addText(“text”)中删除.addText
  • 删除AntTweakBar绘图例程
    params::InterfaceGl::draw()
  • 去除颜色的变化
    glColor4f(randFloat(),0.2,0.3,0.4)
  • 拆下内部推拉矩阵和平移
  • 在Intel GPU而不是nVidia GPU上运行

我正试图解决这个问题,但这个bug对我来说很奇怪。你能给我推荐一种诊断方法吗?我无法控制AntTweakBar,而且它非常复杂,所以我不知道是什么让它触发了这个bug。只有当我在AntTweakBar面板上绘制了一些东西时,才会发生这种情况。在Cinder的论坛上,但我相信它与Cinder无关。是否有任何工具可用于诊断OpenGL驱动程序决定以0 FPS的速度运行的原因?

确保在任何OpenGL操作之前调用
ShowWindow

发布版本通常会引入编译器优化,而调试通常不会。尝试更改编译器优化设置,看看是否会有所不同。仅在发布版本中发生的错误通常是由初始化和/或指针相关问题引起的。例如,如果进行调试构建,大多数编译器会将内存区域初始化为某个特殊常量。而在发布版本中,内存将不会初始化,因此在运行时,未初始化的变量将具有随机值。因此,再次检查所有变量是否已初始化。如果你能发布你的代码,这会很有帮助。两个版本都是相同的:Release。所有的区别都是用F5或Ctrl+F5运行的。@zsero:当程序启动时附加了一个调试器,您会得到一个不同的内存管理器(调试堆)。稍后,当程序已经在没有调试堆的情况下加载时,尝试使用调试器的“附加到进程”功能连接到程序。看起来像一个。
#include "cinder/app/AppBasic.h"
#include "cinder/gl/gl.h"
#include "cinder/params/Params.h"
#include "cinder/Rand.h"
#include "cinder/Camera.h"

using namespace ci;
using namespace ci::app;
using namespace std;

class params_slowApp : public AppBasic
{
    public:
        void setup();
        void update();
        void draw();
        void prepareSettings( Settings *settings );

        CameraPersp mCam;
        params::InterfaceGl mParams;
};

void params_slowApp::prepareSettings( Settings *settings )
{
    settings->setWindowSize( 1280, 720 );
    settings->setFrameRate( 300 );
}

void params_slowApp::setup()
{
    gl::enableVerticalSync( false );
    gl::enableAlphaBlending();

    mCam.setPerspective( 45.0f, getWindowAspectRatio(), 5.0f, 300000.0f );
    mCam.lookAt( Vec3f::zero(), -Vec3f::zAxis(), Vec3f::yAxis() );

    mParams = params::InterfaceGl( "controls", Vec2i( 200, 300 ) );
    mParams.addText( "text" );
}

void params_slowApp::update()
{
}

void params_slowApp::draw()
{
    gl::clear( Color( 0, 0, 0 ), true );

    gl::pushMatrices();
    gl::setMatrices( mCam );

    gl::enableDepthRead();
    gl::enableDepthWrite();

    for( int i = 0; i < 10000; i++ )
    {
        glColor4f( randFloat(), 0.2, 0.3, 0.4 );

        {
            gl::pushModelView();
            gl::translate( randFloat(-100,100), randFloat(-100,100), randFloat(-10,-100) );
            gl::drawCube( Vec3f::zero(), Vec3f::one() );
            gl::popModelView();
        }
    }

    gl::disableDepthWrite();
    gl::disableDepthRead();

    gl::popMatrices();

    params::InterfaceGl::draw();
}

CINDER_APP_BASIC( params_slowApp, RendererGl )