OpenGLで画面が描画されない原因が知りたい
Posted: 2020年9月06日(日) 19:44
提示コードですがなぜ頂点が描画できないのでしょうか?glVetex3f();という関数が実行できるのでGenerateOutput();関数は毎フレーム呼び出す関数ですが初期化は完了していると思われます。なぜ描画できないのでしょうか?またどれを毎フレームでどれを一回だけつまりvoid Initに置けばいいかも教えて頂きたいです。
bool Game::Initialization()
{
Debug::CreateConsoleWindow();
GLsizei buffer;
///////////////////////////////////////////////////フラグメントシェーダーを読み込む
const char* file_path = "Assets/Shader/Basic.frag";
GLenum shader_type = GL_FRAGMENT_SHADER;
std::ifstream ifs(file_path);
if(ifs.is_open() && true)
{
std::stringstream ss;
ss << ifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();
//シェーダーオブジェクトを作成
GLint out_shader = glCreateShader(shader_type);
printfInfo(out_shader);
//シェーダーソースを読み込む
glShaderSource(out_shader, 1, &source, nullptr);
printfInfo(out_shader);
//シェーダーをコンパイル
glCompileShader(out_shader);
printfInfo(out_shader);
mShaderProgram = glCreateProgram();
printfInfo(out_shader);
glLinkProgram(mShaderProgram);
printfInfo(out_shader);
glAttachShader(mShaderProgram,out_shader);
printfInfo(out_shader);
glDeleteShader(out_shader);
printf("正常にフラグメントシェーダーを読み込みました\n");
}else{
printf("フラグメントシェーダーがありません。\n");
return false;
}
///////////////////////////////////////////////////バーティックスシェーダーを読み込む
const char* file_path_ = "Assets/Shader/Basic.vert";
GLenum _shader_type = GL_VERTEX_SHADER;
std::ifstream sifs(file_path_);
if(sifs.is_open() && true)
{
std::stringstream ss;
ss << sifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();
GLint _out_shader = glCreateShader(_shader_type);
printfInfo(_out_shader);
glShaderSource(_out_shader, 1, &source, nullptr);
printfInfo(_out_shader);
glCompileShader(_out_shader);
printfInfo(_out_shader);
mShaderProgram = glCreateProgram();
printfInfo(_out_shader);
glLinkProgram(mShaderProgram);
printfInfo(_out_shader);
glAttachShader(mShaderProgram,_out_shader);
printfInfo(_out_shader);
glDeleteShader(_out_shader);
printf("正常にバーティックスシェーダーを読み込みました\n");
}else{
printf("バーティックスシェーダーがありません。\n");
return false;
}
glBindAttribLocation(mShaderProgram,0,"index");
/*
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertex);
// Create vertex array
glGenVertexArrays(1, &mVertexArray);
glBindVertexArray(mVertexArray);
// Create vertex buffer
glGenBuffers(1, &mVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, 6 * 3 * sizeof(float), vertex, GL_STATIC_DRAW);
// Create index buffer
glGenBuffers(1, &mIndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * sizeof(unsigned int), index, GL_STATIC_DRAW);
// Specify the vertex attributes
// (For now, assume one vertex format)
// Position is 3 floats starting at offset 0
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5,reinterpret_cast<void*>(sizeof(float) * 3));
*/
return true;
}
GLubyte mask[128];
//Renderer
void Game::GenerateOutput()
{
//////////////////////////////////////////////////////////////
//glBegin(GL_POLYGON);
//glEnd();
//////////////////////////////////////////////////////////////
}
//////////頂点シェーダー
// Request GLSL 3.3
#version 330
// This should correspond to the data stored
// for each vertex in the vertex buffer.
// For now, just a position.
in vec3 inPosition;
void main()
{
// The vertex shader needs to output a 4D
// coordinate.
// For now set the 4th coordinate to 1.0
gl_Position = vec4(inPosition, 1.0);
}
////////////////フラグメントシェーダー
out vec4 outColor;
void main()
{
// RGBA of 100% blue, 100% opaque
outColor = vec4(0.0, 0.0, 1.0, 1.0);
}
bool Game::Initialization()
{
Debug::CreateConsoleWindow();
GLsizei buffer;
///////////////////////////////////////////////////フラグメントシェーダーを読み込む
const char* file_path = "Assets/Shader/Basic.frag";
GLenum shader_type = GL_FRAGMENT_SHADER;
std::ifstream ifs(file_path);
if(ifs.is_open() && true)
{
std::stringstream ss;
ss << ifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();
//シェーダーオブジェクトを作成
GLint out_shader = glCreateShader(shader_type);
printfInfo(out_shader);
//シェーダーソースを読み込む
glShaderSource(out_shader, 1, &source, nullptr);
printfInfo(out_shader);
//シェーダーをコンパイル
glCompileShader(out_shader);
printfInfo(out_shader);
mShaderProgram = glCreateProgram();
printfInfo(out_shader);
glLinkProgram(mShaderProgram);
printfInfo(out_shader);
glAttachShader(mShaderProgram,out_shader);
printfInfo(out_shader);
glDeleteShader(out_shader);
printf("正常にフラグメントシェーダーを読み込みました\n");
}else{
printf("フラグメントシェーダーがありません。\n");
return false;
}
///////////////////////////////////////////////////バーティックスシェーダーを読み込む
const char* file_path_ = "Assets/Shader/Basic.vert";
GLenum _shader_type = GL_VERTEX_SHADER;
std::ifstream sifs(file_path_);
if(sifs.is_open() && true)
{
std::stringstream ss;
ss << sifs.rdbuf();
std::string str = ss.str();
const char* source = str.c_str();
GLint _out_shader = glCreateShader(_shader_type);
printfInfo(_out_shader);
glShaderSource(_out_shader, 1, &source, nullptr);
printfInfo(_out_shader);
glCompileShader(_out_shader);
printfInfo(_out_shader);
mShaderProgram = glCreateProgram();
printfInfo(_out_shader);
glLinkProgram(mShaderProgram);
printfInfo(_out_shader);
glAttachShader(mShaderProgram,_out_shader);
printfInfo(_out_shader);
glDeleteShader(_out_shader);
printf("正常にバーティックスシェーダーを読み込みました\n");
}else{
printf("バーティックスシェーダーがありません。\n");
return false;
}
glBindAttribLocation(mShaderProgram,0,"index");
/*
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2,GL_FLOAT,0,vertex);
// Create vertex array
glGenVertexArrays(1, &mVertexArray);
glBindVertexArray(mVertexArray);
// Create vertex buffer
glGenBuffers(1, &mVertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, mVertexBuffer);
glBufferData(GL_ARRAY_BUFFER, 6 * 3 * sizeof(float), vertex, GL_STATIC_DRAW);
// Create index buffer
glGenBuffers(1, &mIndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 4 * sizeof(unsigned int), index, GL_STATIC_DRAW);
// Specify the vertex attributes
// (For now, assume one vertex format)
// Position is 3 floats starting at offset 0
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5,reinterpret_cast<void*>(sizeof(float) * 3));
*/
return true;
}
GLubyte mask[128];
//Renderer
void Game::GenerateOutput()
{
//////////////////////////////////////////////////////////////
//glBegin(GL_POLYGON);
//glEnd();
//////////////////////////////////////////////////////////////
}
//////////頂点シェーダー
// Request GLSL 3.3
#version 330
// This should correspond to the data stored
// for each vertex in the vertex buffer.
// For now, just a position.
in vec3 inPosition;
void main()
{
// The vertex shader needs to output a 4D
// coordinate.
// For now set the 4th coordinate to 1.0
gl_Position = vec4(inPosition, 1.0);
}
////////////////フラグメントシェーダー
out vec4 outColor;
void main()
{
// RGBA of 100% blue, 100% opaque
outColor = vec4(0.0, 0.0, 1.0, 1.0);
}