Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 726
1

LoadShaderAsString() не определена. Как загрузить код шейдера?

03.11.2015, 13:11. Показов 2603. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, хочу использовать функцию loadShaderAsString() но visual studio не видит такую функцию.

Подключены следующие заголовочные файлы:
C++
1
2
3
4
5
#include <stdlib.h>
#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>
Делаю согласно книге "OpenGL 4. Язык шейдеров. Книга рецептов."
Функция glCreateShader() распознается вместе с GL_VERTEX_SHADER. Как загрузить код шейдера через loadShaderAsString() или есть какие нибудь другие способы?

Добавлено через 4 часа 3 минуты
Нашел ответ на вопрос тут - Загрузка шейдеров

Вопрос решен, отчасти..)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2015, 13:11
Ответы с готовыми решениями:

Непонятен код шейдера
Здравствуйте. Объясните, пожалуйста, строки из вершинного шейдера : ...

Объяснить код шейдера
ВОТ КОД ШЕЙДЕРА: #ifdef GL_ES precision mediump float; #endif #extension...

Подкиньте код шейдера на GLSL для Qml-я, чтоб во круг мышки какие - нибуть искорки сыпались )
В общем виду я мышку, а во круг неё искры или звёздочки сыпятся... Нет ничего годового? Нужно для...

Как загрузить HTML код в ListBox
Помогите написать программу. Она должна загружать и вывести на экран (listBox) HTML код сайта...

2
655 / 236 / 46
Регистрация: 24.01.2013
Сообщений: 725
03.11.2015, 14:25 2
тут еще посмотри, есть пример загрузки
https://www.opengl.org/wiki/Shader_Compilation
0
14 / 14 / 6
Регистрация: 07.09.2013
Сообщений: 159
04.11.2015, 23:00 3
Если я верно понял Вас, то Вам необходимо следующее:
Функция загрузки шейдера и компиляции программы шейдерной.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
GLuint LoadShaders(const char *vertexshader, const char *fragmentshader)
{
    cout << "Use shaders: " << vertexshader << " " << fragmentshader << endl;
    GLint compile = GL_FALSE;
    int errorInfo = 0;
    GLuint vsID = glCreateShader(GL_VERTEX_SHADER);
    GLuint fsID = glCreateShader(GL_FRAGMENT_SHADER);
 
    string vsCode = "";
    ifstream vsStream(vertexshader, ios::in);
    if (vsStream.is_open())
    {
        string line = "";
        while (getline(vsStream, line))
        {
            vsCode += "\n" + line;
        }
        vsStream.close();
    }
    else 
    {
        cout << "Impossible to open vertex shader file!" << endl;
    }
 
    string fsCode = "";
    ifstream fsStream(fragmentshader, ios::in);
    if (fsStream.is_open())
    {
        string line = "";
        while (getline(fsStream, line))
        {
            fsCode += "\n" + line;
        }   
        fsStream.close();
    }
 
    cout << "Try to compile vertex shader..." << endl;
 
    const char *vsInCode = vsCode.c_str();
 
    glShaderSource(vsID, 1, &vsInCode, NULL);
    glCompileShader(vsID);
    glGetShaderiv(vsID, GL_COMPILE_STATUS, &compile);
    glGetShaderiv(vsID, GL_INFO_LOG_LENGTH, &errorInfo);
    if (errorInfo > 0 || !compile)
    {
        vector<char> vsError(errorInfo + 1);
        glGetShaderInfoLog(vsID, errorInfo, NULL, &vsError[0]);
        cout << &vsError[0] << endl;
    }
    compile = GL_FALSE; 
    errorInfo = 0;
 
    cout << "Try to compile fragment shader..." << endl;
 
    const char *fsInCode = fsCode.c_str();
 
    glShaderSource(fsID, 1, &fsInCode, NULL);
    glCompileShader(fsID);
    glGetShaderiv(fsID, GL_COMPILE_STATUS, &compile);
    glGetShaderiv(fsID, GL_INFO_LOG_LENGTH, &errorInfo);
    if (errorInfo > 0 || !compile)
    {
        vector<char> fsError(errorInfo + 1);
        glGetShaderInfoLog(fsID, errorInfo, NULL, &fsError[0]);
        cout << &fsError[0] << endl;
    }
    
    compile = GL_FALSE; 
    errorInfo = 0;
 
    cout << "Try to link program..." << endl;
    GLuint program = glCreateProgram();
    glAttachShader(program, vsID);
    glAttachShader(program, fsID);
    glLinkProgram(program);
    glGetProgramiv(program, GL_LINK_STATUS, &compile);
    glGetProgramiv(program, GL_INFO_LOG_LENGTH, &errorInfo);
    if (errorInfo > 0  || !compile) 
    {
        vector<char> programError(errorInfo + 1);
        glGetProgramInfoLog(program, errorInfo, NULL, &programError[0]);
        cout << &programError[0] << endl;
    }
 
    glDeleteShader(vsID);
    glDeleteShader(fsID);
 
    return program;
}
Вызывать так:
C++
1
GLuint program = LoadShaders("путь к вершинному/vs.vert", "путь к фрагментному/fs.frag");
0
04.11.2015, 23:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2015, 23:00
Помогаю со студенческими работами здесь

Как загрузить код из текстового файла?
Как загрузить код из текстого файла?

Как загрузить в Memo код веб страницы??
Как загрузить в Memo код веб страницы?? Может для этого более хороши другие компоненты. В свойствах...

Как загрузить картинку наImage через код
Пишу Image1.Picture := 'c:\main.bmp' но String с TPicture не дружит. Как можно другим способом...

Как загрузить код из другого файла на страницу htm
Допустим у меня есть несколько htm(html) страниц, которые содержат одинаковое меню и вот это меню я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru