LINUX.ORG.RU

oglplus - не видятся некоторые методы и ничего не автодополняется

 oglplus,


0

1

Сначала просто не было автодополнения, но собиралось нормально. Хотя, вроде, всё, что нужно, подключил:

#ifndef APPLICATION_H
#define APPLICATION_H
#include <iostream>
#include <fstream>
#include <SDL2/SDL.h>
#define GLCOREARB_PROTOTYPES 1
#include "glcorearb.h"
#include <oglplus/all.hpp>
#include <oglplus/shader.hpp>
#include <oglplus/program.hpp>
#include <oglplus/buffer.hpp>
#include <oglplus/context.hpp>

class application
{
public:
    application(std::string appName);
    void end();
    void run();
    bool setupShaders(std::string vss, std::string fss);
    bool setupBuffers();
    std::string loadShader(std::string fileName);
private:
    SDL_Window *window;
    oglplus::Context gl;
    SDL_GLContext context;
    oglplus::VertexShader vs;
    oglplus::FragmentShader fs;
    oglplus::Program prog;
    oglplus::VertexArray arr;
    oglplus::Buffer verts[2];
};

#endif // APPLICATION_H

Но потом стало ругаться на несуществующий метод isCompiled(), хотя в документации он есть, и еще несколько аналогичных ошибок:

bool application::setupShaders(std::string vss, std::string fss)
{
    std::string vsCode = loadShader(vss);
    std::string fsCode = loadShader(fss);
    if(vsCode!="")
    {
        vs.Source(vsCode);
        vs.Compile();
        if(!vs.isCompiled())
            return false;
    }
    else
        return false;
    if(fsCode!="")
    {
        fs.Source(fsCode);
        fs.Compile();
        if(!fs.isCompiled())
            return false;
    }
    else
        return false;
    prog.AttachShader(vs);
    prog.AttachShader(fs);
    prog.Link();
    if(!prog.isLinked())
        return false;
    /*prog.Validate();
    if(!prog.isValid())
        return false;*/
    prog.Use();
}
Чую, придется не валять дурака и использовать openGL без этого фасада, каким бы удобным это ни казалось:(

★★★★

стало ругаться на несуществующий метод isCompiled()

А в самих хидерах он есть? Подозреваю, что вы используете хидеры и документацию разных версий.

не валять дурака и использовать openGL без этого фасада

Придется в итоге свой фасад пилить, иначе нервы не выдержат.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Оказалось, методы были с большой буквы:) Правда, почему не автодополняется, так и не понял

wingear ★★★★
() автор топика

У QtCreator проблемы с макросами, здесь именно они и проявляются. На выбор два варианта:

1) небольшой wokraround: в файле проекта явно прописать макросы, которые среда не может объявить, как-то так

DEFINES += GL_VERTEX_SHADER GL_GEOMETRY_SHADER GL_FRAGMENT_SHADER GL_TESS_CONTROL_SHADER GL_TESS_EVALUATION_SHADER GL_COMPUTE_SHADER
GLCOREARB_PROTOTYPES туда тоже стоит добавить.

2) можно использовать QtCreator с clang в качестве движка. Этот вариант сейчас сильно тормозит и дополняет иногда похуже, но разбор на 100% точный. К сожалению, придётся собирать самостоятельно вот эту ветку.

quiet_readonly ★★★★
()

И ещё совет: используй в качестве компилятора clang. Что бы там ни говорили про GCC 4.8, сообщения об ошибках у него значительно точнее, в частности при появлении необъявленного идентификатора он неплохо угадывает, что могло иметься ввиду. При опечатке в isCompiled() он бы написал «did you mean IsCompiled()?».

quiet_readonly ★★★★
()
Ответ на: комментарий от Stil

Сравнивают с clang 3.1, при том что clang 3.2 выйдет скорее всего раньше gcc 4.8, а дублирование одного и того же варнинга авторы gcc почему-то считают более хорошим решением.

А тем временем новый clang при распечатке сложных типов с вложенными шаблонами собирается прятать несущественные параметры шаблона.

candidate function not viable: no known conversion from 'vector<map<[...], float>>' to 'vector<map<[...], double>>' for 1st argument;

quiet_readonly ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.