C++ Swiftshader(角度项目)vsync不工作,如何解决?

C++ Swiftshader(角度项目)vsync不工作,如何解决?,c++,opengl-es,egl,C++,Opengl Es,Egl,我使用了libglesv2.dll,libegl.dll库,来自(Angleproject)。。 (注意:我从swift着色器文件夹获得的DLL) 默认DLL与vsync完美配合,但swiftshadderDLLvsync不起作用。。 我通过eglSwapInterval(egl_显示,1)启用vsync; 没有vsync,我会流泪。。 我的问题是 1、如何在不撕裂的情况下达到60帧/秒90帧/秒120帧/秒。。? 2、(无撕裂)Vsync唯一解决方案那么,如何使用 swiftsha

我使用了libglesv2.dlllibegl.dll库,来自(Angleproject)。。
(注意:我从swift着色器文件夹获得的DLL)
默认DLL与vsync完美配合,但swiftshadderDLLvsync不起作用。。
我通过eglSwapInterval(egl_显示,1)启用vsync;
没有vsync,我会流泪。。
我的问题是
1、如何在不撕裂的情况下达到60帧/秒90帧/秒120帧/秒。。?
2、(无撕裂)Vsync唯一解决方案那么,如何使用 swiftshadder..vsync?

请参见这里的示例代码。。它的vsync可以在defualt DLL上工作,但在swiftshadder DLL上失败。。


我们至少需要一个软件来帮助你。我看不到有人提到渲染功能或swiftshader是如何融入其中的。提到交换间隔被静默地钳制为介于
EGL\u MIN\u swap\u interval
EGL\u MAX\u swap\u interval
之间的值。你检查过了吗?你在哪里看到交换间隔在任何一个版本的SwiftShader源代码中得到遵守?
EGLConfig egl_config;
EGLint num_config, majorVersion, minorVersion;

EGLint config_attrib_list[] = {
    EGL_BUFFER_SIZE, 16,
    EGL_RENDERABLE_TYPE,
    EGL_OPENGL_ES2_BIT,
    EGL_NONE
};

EGLint context_attrib_list[] = {
        EGL_CONTEXT_CLIENT_VERSION, 2,
        EGL_NONE
};

egl_display = eglGetDisplay(NULL);
eglInitialize(egl_display, &majorVersion, &minorVersion);
eglChooseConfig(egl_display, config_attrib_list, &egl_config, 1, &num_config);
egl_surface= eglCreateWindowSurface(egl_display, egl_config, (NativeWindowType)hwnd, NULL);
egl_context = eglCreateContext(egl_display, egl_config, EGL_NO_CONTEXT, context_attrib_list);
eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context);
eglSwapInterval(egl_display, 1);

const char *vs = "\
            attribute vec2 pos;\
            uniform vec2 offset;\
            void main() {\
                gl_Position = vec4(pos + offset, 0, 1);\
            }";

GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertex_shader, 1, &vs, NULL);
glCompileShader(vertex_shader);
const char *fs = "\
            void main() {\
                gl_FragColor = vec4(1, 0, 0, 1);\
            }";
GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragment_shader, 1, &fs, NULL);
glCompileShader(fragment_shader);
program = glCreateProgram();
glAttachShader(program, vertex_shader);
glAttachShader(program, fragment_shader);
glLinkProgram(program);
glUseProgram(program);
glViewport(0, 0, 1366, 768);

std::chrono::system_clock::time_point a = std::chrono::system_clock::now();
std::chrono::system_clock::time_point b = std::chrono::system_clock::now();

while ()
{
    if (exit_app) break;

    render();

    a = std::chrono::system_clock::now();

    std::chrono::duration<double, std::milli> work_time = a - b;
    if (work_time.count() < 16.44)
    {
        std::chrono::duration<double, std::milli> delta_ms(16.44 - work_time.count());
        auto delta_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(delta_ms);
        std::this_thread::sleep_for(std::chrono::milliseconds(delta_ms_duration.count()));
    }
    b = std::chrono::system_clock::now();

    eglSwapBuffers(egl_display, egl_surface);

}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
static const float vertices[] = {
   1.0f,  0.0f,
  -0.5f,  0.5f,
   0.5f, -0.5f
};
glVertexAttribPointer(
    0, 2, GL_FLOAT, GL_FALSE,
    2 * sizeof(float), (GLvoid*)vertices
);
glEnableVertexAttribArray(0);
GLuint offset_loc = glGetUniformLocation(program, "offset");
glUniform2f(offset_loc, cosf(frame_number*0.1f), 0);
frame_number++;
glDrawArrays(GL_TRIANGLES, 0, 3);