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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

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

#1

投稿記事 by » 15年前

何度も質問してすいません(汗)
やはり解決できないので再度質問させて頂きました。
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での範囲指定でのテクスチャの読み込み

#2

投稿記事 by シエル » 15年前

どんなエラーが出るんですか?

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

#3

投稿記事 by » 15年前

return SZGLLoadTexture(texture.imagePath, &texture.imageSize, &texture.textureSize);

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

めるぽん

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

#4

投稿記事 by めるぽん » 15年前

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での範囲指定でのテクスチャの読み込み

#5

投稿記事 by » 15年前

遅くなってすみません。
お陰さまで解決できました!!
アドバイスありがとうございました。
本当に助かりました><

閉鎖

“C言語何でも質問掲示板” へ戻る