2011-01-26 20 views
1

ノートパソコンで実行しようとしているコードがありますが、フォールバックエラーが発生します。私はそれが何であるか分からないが、それはかなり迷惑である。それはちょうど 'Hello world!'を出力するはずですが、2回印刷して色を少し変えます。Visual Studioフォールバックエラー - プログラミングC++

私の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); 

多分これが助けることができますか?

+1

コードは、独自のビジネスの秘密、またはあなたがあなたの質問と一緒にそれをここに投稿する可能性があると思いますか? –

+0

あなたは詳細を与える必要があります。あなたのコードは何ですか?サードパーティのライブラリを使用していますか? 「フォールバックエラー」とは何ですか? – tenfour

+0

@tenfour:彼は私たちに*「フォールバック・エラー」が何であるかを尋ねていることは間違いないと確信しています...しかし、賛成です。 –

答えて

4

OpenGl Forumsからこの投稿を見て、あなたがOpenGLを使っているのを見て、私は考えているかもしれません。 あなたのコンピュータでコードはうまく動作しますが、ノートブックではうまく動作しません。あなたは可能なハードウェア(異なるビデオカード)とソフトウェア(異なるOpenGLのバージョン/サポート)があります。

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

EDIT:

あなたはGLEWの表情がかかる場合があります。あなたのハードウェア/ドライバで利用可能なすべての機能を探す "glewinfo"というツールがあります。実行可能ファイルの同じパスに同じ名前のファイルを生成します。 2つのテクスチャのパワーについては、GL_ARB_texture_non_power_of_twoを探してください。

EDIT 2:

あなたはGL_ARB_texture_non_power_of_two拡張子なしで、コメントに言ったように、と640×480のサイズのテクスチャ、glTextureはあなたにエラーを与えるだろうし、それに依存するすべてのコードの可能性が高いでしょう失敗します。これを修正するには、画像のサイズを次の2の累乗に伸ばす必要があります。この場合、1024x512になります。あなたがglTexture に提供するデータは、これらの次元がである必要があります。エラーがラインから来ていることを見て

+0

まあ、それは正確な機能に依存します。 glError()が返すものを見てみましょう。例:http://www.opengl.org/wiki/GL_error_codes – korbes

+0

SCRWIDTHとSCRHEIGHTの値はどうですか?彼らが2の累乗でない場合は、次の2の累乗にそれらを拡張する必要があります。 – korbes

+0

これはおそらく768と1536は2の累乗ではないからです。あなたのケース**の画像の寸法は** ** ** n ** 2^nでなければなりません** – korbes

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. 

EDIT:私はそれが問題を引き起こしている非2の累乗のテクスチャサイズ可能性が信じています。テクスチャサイズを2のべき乗に近似すると、問題が解決するはずです。

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

BUT DANGあなたの画像のデータはありませんか? NULLに設定されています。テクスチャを作成するには、画像データをメモリにロードして関数に渡す必要があります。そして、あなたはそれをやっていません。 how to load images from a fileまたはhow to render to textureのどちらか該当する方をお読みください。

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; 
} 

礼儀:Post by b0x in Game Deception

次に、あなたは同様に、あなたのコードでそれを呼び出す必要があります:

unsigned int texture = LoadTex("example_tex.bmp"); 
+0

残念ながら、あなたのコードを見ずに完全に説明することはできません。それは、あなたがコード化して修正したものを「推測する」ように求めることのようなものです。 –

関連する問題