1

ラップトップで実行しようとしているコードがいくつかありますが、「FALLBACK」エラーが発生し続けます。それが何であるかはわかりませんが、かなり面倒です。「Helloworld!」とだけ印刷する必要がありますが、2回印刷して、色を少し変更します。

同じコードが私のPCで完全に実行されています。

この問題を解決するために長い間検索しましたが、何も見つかりませんでした。ここにいる何人かの人々が私を助けてくれることを願っていますか?

これが私のコードです:

// Template, major revision 3

#include "string.h"
#include "surface.h"
#include "stdlib.h"
#include "template.h"
#include "game.h"

using namespace Tmpl8;

void Game::Init()
{
    // put your initialization code here; will be executed once
}

void Game::Tick( float a_DT )
{
    m_Screen->Clear( 0 );
    m_Screen->Print( "hello world", 2, 2, 0xffffff );
    m_Screen->Line( 2, 10, 66, 10, 0xffffff );
}

前もって感謝します!:-)

編集:

この行にエラーが表示されます。

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, SCRWIDTH, SCRHEIGHT, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

多分これは役立つかもしれませんか?

4

3 に答える 3

4

OpenGl フォーラムのこの投稿を見て、あなたが OpenGL を使用していることを確認すると、アイデアが浮かぶかもしれません。コードはコンピューターでは正常に機能しますが、ノートブックでは機能しないとあなたは言います。そこには、可能なハードウェア (異なるビデオ カード) とソフトウェア (異なる OpenGL バージョン/サポート) があります。

OpenGL から使用したい機能がノートブックでサポートされていない可能性があります。また、データなし (最後のパラメーターの NULL) でテクスチャを作成しているため、おそらくバッファー オーバーフローなどのエラーが発生します。

編集:

GLEWをご覧ください。ハードウェア/ドライバーで利用可能なすべての機能を検索する「glewinfo」と呼ばれるツールがあります。実行可能ファイルの同じパスに同じ名前のファイルを生成します。テクスチャの 2 乗については、GL_ARB_texture_non_power_of_two を探してください。

編集2:

コメントで述べたように、GL_ARB_texture_non_power_of_two 拡張機能がなく、サイズが 640x480 のテクスチャがない場合、glTexture はエラーを返し、それに依存するすべてのコードが失敗する可能性があります。これを修正するには、画像のサイズを次の 2 の累乗に引き伸ばす必要があります。この場合、1024x512 になります。glTexture に提供するデータに、これらの次元が必要であることに注意してください。

于 2011-02-09T14:45:28.187 に答える
0

エラーが次の行から発生していることを確認します。

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, SCRWIDTH, SCRHEIGHT, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

その関数が GL_INVALID_VALUE を返す理由は次のとおりです。確実に確認することはできないため、このリストを調べて、この問題の原因がどれであるかを確認する必要があります。

GL_INVALID_VALUE is generated if level is less than 0.

GL_INVALID_VALUE may be generated if level is greater than log 2 ⁡ max , where max is the returned value of GL_MAX_TEXTURE_SIZE.

GL_INVALID_VALUE is generated if internalFormat is not 1, 2, 3, 4, or one of the accepted resolution and format symbolic constants.

GL_INVALID_VALUE is generated if width or height is less than 0 or greater than 2 + GL_MAX_TEXTURE_SIZE.

GL_INVALID_VALUE is generated if non-power-of-two textures are not supported and the width or height cannot be represented as 2 k + 2 ⁡ border for some integer value of k.

GL_INVALID_VALUE is generated if border is not 0 or 1.

編集:問題を引き起こしているのは、2のべき乗でないテクスチャサイズである可能性があると思います。テクスチャ サイズを最も近い 2 の累乗に丸めると、おそらく問題が解決するはずです。

EDIT2:これらのどれが問題を引き起こしているかをテストするために、最も一般的な問題から始めましょう。2 のべき乗でないサイズのテクスチャを作成しようとしています。サイズが 256x256 のイメージを作成し、幅と高さに 256 を指定してこの関数を呼び出します。関数がまだ失敗する場合は、レベルを 0 に設定してみます (2 の累乗のサイズを維持します)。

しかし、画像のデータがありませんか? NULL に設定されています。画像データをメモリにロードし、それを関数に渡してテクスチャを作成する必要があります。そして、あなたはそれをしていません。ファイルから画像をロードする方法またはテクスチャにレンダリングする方法のうち、関連する方をお読みください。

于 2011-02-22T14:40:22.540 に答える
0

これは、新しい投稿としてより良い回答を提供するためです。まず、bmp ファイルをメモリにロードするには、このヘルパー関数が必要です。

unsigned int LoadTex(string Image)
{
    unsigned int Texture;

                FILE* img = NULL;
                img = fopen(Image.c_str(),"rb");

    unsigned long bWidth = 0;   
    unsigned long bHeight = 0;  
    DWORD size = 0; 

    fseek(img,18,SEEK_SET);
    fread(&bWidth,4,1,img);
    fread(&bHeight,4,1,img);
    fseek(img,0,SEEK_END);
    size = ftell(img.file) - 54;

    unsigned char *data = (unsigned char*)malloc(size);

    fseek(img,54,SEEK_SET); // image data
    fread(data,size,1,img);

    fclose(img);

    glGenTextures(1, &Texture);
    glBindTexture(GL_TEXTURE_2D, Texture);
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bWidth, bHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

    if (data)
        free(data);

    return Texture;
}

提供: b0x による Game Deception への投稿

次に、同様にコードで呼び出す必要があります。

unsigned int texture = LoadTex("example_tex.bmp");
于 2011-02-22T16:47:15.000 に答える