質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3952閲覧

OpenGLでテクスチャを表示することが出来ない

KureteRubyLua

総合スコア206

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2016/12/07 09:47

編集2016/12/07 10:05

OpenGLでテクスチャを表示しようとしたのですが、どうやっても出来ません。
原因は全く分かりません。分かった事はglGenTexture関数の後、glIsTextureを
呼び出すとGL_FALSEで返ってくるという事だけです。

開発環境はVisual Studio 2015、OSはWindwos 10 64 bit、メモリは4GB、CPUはCore i5 2.9GHz、GPUはインテルHDグラフィックス、コンパイル環境はDebugのX64、GLFWを用いています。コードは以下のものになります。

C++

1 2#include <GL/glfw.h> 3#include <cstdlib> 4#include <cmath> 5#include <fstream> 6#include <vector> 7#include <cassert> 8 9const int g_windowWidth = 640; 10const int g_windowHeight = 480; 11GLuint g_texID; 12 13void render() 14{ 15 static const GLfloat vtx[] = { 16 200, 120, 17 440, 120, 18 440, 360, 19 200, 360, 20 }; 21 glVertexPointer(2, GL_FLOAT, 0, vtx); 22 23 // Step5. テクスチャの領域指定 24 static const GLfloat texuv[] = { 25 0.0f, 1.0f, 26 1.0f, 1.0f, 27 1.0f, 0.0f, 28 0.0f, 0.0f, 29 }; 30 glTexCoordPointer(2, GL_FLOAT, 0, texuv); 31 32 // Step6. テクスチャの画像指定 33 glBindTexture(GL_TEXTURE_2D, g_texID); 34 35 // Step7. テクスチャの描画 36 glEnable(GL_TEXTURE_2D); 37 glEnableClientState(GL_VERTEX_ARRAY); 38 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 39 glDrawArrays(GL_QUADS, 0, 4); 40 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 41 glDisableClientState(GL_VERTEX_ARRAY); 42 glDisable(GL_TEXTURE_2D); 43} 44 45void setupTexture(GLuint texID, const char *file, const int width, const int height) 46{ 47 // Step2. 画像データのロード 48 std::ifstream fstr(file, std::ios::binary); 49 assert(fstr); 50 51 const size_t fileSize = static_cast<size_t>(fstr.seekg(0, fstr.end).tellg()); 52 fstr.seekg(0, fstr.beg); 53 std::vector<char> textureBuffer(fileSize); 54 fstr.read(&textureBuffer[0], fileSize); 55 56 // Step3. 画像データとテクスチャiDを結びつける 57 glBindTexture(GL_TEXTURE_2D, texID); 58 // Step4. テクスチャの各種設定 59 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 60 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 61 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 62 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 63 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &textureBuffer[0]); 64 65 66} 67 68 69int main() 70{ 71 if (!glfwInit()) { 72 return -1; 73 } 74 GLFWwindow* window = glfwCreateWindow(g_windowWidth, g_windowHeight, "SAMPLE", NULL, NULL); 75 if (window == nullptr) { 76 return -1; 77 } 78 79 // モニタとの同期 80 glfwSwapInterval(1); 81 82 // 描画範囲の指定 83 glMatrixMode(GL_PROJECTION); 84 glLoadIdentity(); 85 glOrtho(0.0f, g_windowWidth, 0.0f, g_windowHeight, -1.0f, 1.0f); 86 87 // Step1. テクスチャのロード 88 glGenTextures(1, &g_texID); 89 setupTexture(g_texID, "test.raw", 16, 16); 90 91 92 glfwMakeContextCurrent(window); 93 // ゲームループ 94 while (!glfwWindowShouldClose(window)) { 95 96 // 画面の初期化 97 glClearColor(1.0f, 0.5f, 0.5f, 0.0f); 98 glClear(GL_COLOR_BUFFER_BIT); 99 render(); 100 101 Sleep(32); 102 glFlush(); 103 // バッファの入れ替え 104 glfwSwapBuffers(window); 105 glfwWaitEvents(); 106 } 107 108 glfwTerminate(); 109 110 return 0; 111}

ソースコードは下記のURLを参考にして、おかしな部分を書き直した物です。
よろしくお願いします。

http://nn-hokuson.hatenablog.com/entry/2014/02/05/001602

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

glfwMakeContextCurrentを呼んだ後にglGenTextures(または、諸々のOpenGLAPI)を呼ぶようにしてください。

投稿2016/12/07 10:16

katsuko

総合スコア3469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KureteRubyLua

2016/12/07 22:12

やったら出来ました。有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問