ページ 11

OpenGL ESでの範囲指定でのテクスチャの読み込み

Posted: 2010年7月29日(木) 06:25
by
何度も質問してすいません(汗)
やはり解決できないので再度質問させて頂きました。
http://www.play21.jp/board/formz.cgi?ac ... &rln=57703

作ったテクスチャ用のクラスは下記の様な感じです。
/*--------------------------------------------------
  テクスチャ用クラス
--------------------------------------------------*/
class Texture{
public:
    GLuint texture;
    CGSize imageSize, textureSize;
    NSString *imagePath;
    int startX, startY, sizeX, sizeY;
};
①、②は自分で作ろうとしている関数です。
①は作ったクラスを入れれば元の関数にセットしてくれる関数です。
エラーは起こっていないのですが何も読み込めていないです。

②はサイズを指定して読み込む用に作っている関数です。
現在は初期のX座標しか変更しないようにしています。
直接、値を弄らなければいけないので
ポインタを使っているのですが②はエラーが起こってしまいます。

原因はなんとなくはわかるのですが改善案がわかりません。
ポインタをもう少し勉強しないといけませんよね・・・。
// 元の関数
SZGLLoadTexture(NSString *imagePath, CGSize *imageSize, CGSize *textureSize){
    if ([[imagePath pathExtension] compare:@"pvr" options:NSCaseInsensitiveSearch] == NSOrderedSame) {
        return SZGLLoadTextureImpl_PVR(imagePath, imageSize, textureSize);
    }
    
    return SZGLLoadTextureImpl_Apple(imagePath, imageSize, textureSize);
}

// ①
GLuint SZGLLoadTexture(Texture texture){
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}

// ②
GLuint SZGLLoadTexture(Texture *texture, int startX){
    *texture.startX = startX;
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}

Re:OpenGL ESでの範囲指定でのテクスチャの読み込み

Posted: 2010年7月29日(木) 07:59
by シエル
どんなエラーが出るんですか?

Re:OpenGL ESでの範囲指定でのテクスチャの読み込み

Posted: 2010年7月30日(金) 01:06
by
return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);

ここの部分でポインタを使って関数を呼ぶと型が違うって言われてしまいます。
1つ目の引数はポインタを使っていないので・・・。

Re:OpenGL ESでの範囲指定でのテクスチャの読み込み

Posted: 2010年7月30日(金) 01:58
by めるぽん
Texture tex;
tex.texture = SZGLLoadTexture(tex);
と書くと、①の引数が
GLuint SZGLLoadTexture(Texture texture){
と定義されているため、tex はコピーされて渡されます。つまり呼び出し元の tex と SZGLLoadTexture の texture は別物です。なので、この texture を変更しても tex は変更されません。なので、
GLuint SZGLLoadTexture(Texture& texture){
として参照を渡すようにすればいいと思います。
あと②の問題ですけど、ポインタ経由で呼び出す場合は
GLuint SZGLLoadTexture(Texture* texture, int startX){
    (*texture).startX = startX;
    return SZGLLoadTexture((*texture).imagePath, &(*texture).imageSize, &(*texture).textureSize);
}
のように texture を *texture とすればさっきと同じように . で中のデータを使えるようになります。または
GLuint SZGLLoadTexture(Texture* texture, int startX){
    texture->startX = startX;
    return SZGLLoadTexture(texture->imagePath, &texture->imageSize, &texture->textureSize);
}
のように . の代わりに -> を使う方法もあります。こちらの方が一般的な気がしますね。
ただまあ、ここではポインタを使うのは無駄なので、さっきと同じように
GLuint SZGLLoadTexture(Texture& texture, int startX){
    texture.startX = startX;
    return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);
}
でいいと思います。

Re:OpenGL ESでの範囲指定でのテクスチャの読み込み

Posted: 2010年7月31日(土) 05:30
by
遅くなってすみません。
お陰さまで解決できました!!
アドバイスありがとうございました。
本当に助かりました><