Hi Alex,
yes it is ATI 9000, it was my mistake at copying the number.
And both the machines have MacOS X 10.3.5.
The PowerBook has the build 7M34. The G5 has the build 7P134. Could be this
the cause of the problem? The old build 7M34?
I create the texture this way:
- (BOOL)BuildMap
{
NSString *resFolder, *imagePath;
NSBitmapImageRep *imageRep;
NSData *imageData;
resFolder = [[NSBundle bundleForClass:[self class]] resourcePath];
imagePath = [resFolder stringByAppendingPathComponent:@"myMap.bmp"];
imageData = [NSData dataWithContentsOfFile:imagePath];
imageRep = [NSBitmapImageRep imageRepWithData:imageData];
if(!imageRep) return NO;
glGenTextures(1, &gMyMap[0]);
return [self GetMyMapFromRep:imageRep];
}
- (BOOL)GetMyMapFromRep:(NSBitmapImageRep*)theImage
{
if(theImage == nil) return NO;
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_RECTANGLE_EXT);
int bitsPPixel, bytesPRow;
unsigned char *theImageData;
int rowNum, destRowNum;
GLenum texFormat = GL_RGB;
bitsPPixel = [theImage bitsPerPixel];
bytesPRow = [theImage bytesPerRow];
glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
if(bitsPPixel == 24) texFormat = GL_RGB; // No Alpha
else if(bitsPPixel == 32) texFormat = GL_RGBA; // Yes Alpha
NSSize texSize;
texSize.width = [theImage pixelsWide];
texSize.height = [theImage pixelsHigh];
char *texBytes = calloc(bytesPRow * texSize.height, 1);
if(texBytes == NULL) return NO;
theImageData = [theImage bitmapData];
for(rowNum = texSize.height - 1, destRowNum = 0;
rowNum >= 0; rowNum--, destRowNum++){
// Copy the entire row in one shot
memcpy(texBytes + (destRowNum * bytesPRow), theImageData +
(rowNum * bytesPRow), bytesPRow);
}
// Create mipmapped gMyMap
glBindTexture(GL_TEXTURE_2D, gMyMap[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, texSize.width, texSize.height,
texFormat, GL_UNSIGNED_BYTE, texBytes);
free(texBytes);
return YES;
}
Then I bind the texture this way:
----------------------------------
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_RECTANGLE_EXT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glBindTexture(GL_TEXTURE_2D, gMyMap[0]);
On my ATI 9800 it works all the time. On my ATI 9000 it works only if I set
glActiveTexture(GL_TEXTURE0);
And I tried with this unique texture. I don't do anything else.
Any idea?
Best Regards
--
Lorenzo
email: email@hidden
> From: Alex Eddy <email@hidden>
> Date: Tue, 16 Nov 2004 15:57:51 -0800
> To: Lorenzo Forum <email@hidden>
> Cc: email@hidden
> Subject: Re: GL_TEXTURE_2D on ATI 9600 and 9800
>
> On Nov 16, 2004, at 12:07 PM, email@hidden wrote:
>> I would like to ask a question about ATI 9600 and 9800.
>> On my 9800 I can see a Texture2D calling GL_TEXTURE0 or 1 or 2 or 3...
>> and
>> it works well.
>> On my ATI 9600 I can see a Texture2D only if I call GL_TEXTURE0...
>> Why?
>
> First of all, there is no functional difference between the 9600 and
> 9800. They both have 8 texture units, with the same extensions and
> capabilities. If your code is working on one and not the other, it's
> due to something else (like, the OS version, or you have some
> conditional execution, or you forgot to initialize a variable somewhere
> and are getting random results.)
>
>
>> On my PowerBook G4 1GHz with an ATI Radeon 9600 (GL_MAX_TEXTURE_UNITS
>> = 6,
>> 64 RAM)
>
> There is no such PowerBook configuration. These are the 1GHz configs
> Apple has sold:
>
> * 1GHz 15" Titanium, 64M Radeon 9000 (6 texture units) introduced Nov
> 2002
> * 1GHz 17" Aluminum, 64M GF4MX (2 texture units) introduced Jan 2003
> * 1GHz 15" Aluminum, 64M Radeon 9600 (8 texture units) introduced Apr
> 2004
>
> If you have the TiBook, then it is possible that some 9000 driver
> problem is causing different behavior from your 9800 machine, but I
> doubt it. If you have the 9600 AlBook, it should behave identically to
> your 9800 machine.
>
>
>> I can see my texture I made with
>> glEnable(GL_TEXTURE_2D);
>> glEnable(GL_TEXTURE_GEN_S);
>> glEnable(GL_TEXTURE_GEN_T);
>> glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
>> glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
>>
>> only if I call GL_TEXTURE0. In facts when I set GL_TEXTURE1, I see
>> garbage.
>
> You have to bind each texture unit to a valid texture ID which has had
> valid texture data defined.
> I have no trouble using any available texture unit on my AlBook with
> 64M Radeon 9600, with or without glTexGen.
>
>
>> I don't want to believe that my ATI 9600 can run one GL_TEXTURE_2D
>> only, and
>> just the number 0 only, even because GL_MAX_TEXTURE_UNITS return 6
>
> If it really says 6, then it isn't a 9600. The 9600 has 8 units. The
> 8500, 9000, and 9200 have 6. Of those, only the 9000 was used in
> PowerBooks. Maybe you have a 9000.
>
> If it is a 9000, then it very well could have different behavior from
> the 9800 depending what else you are doing. For example
> ARB_fragment_program won't work. But if you're only doing regular fixed
> function multitexturing, it should work fine, with up to 6 texture
> units.
>
>
>> So, where should I check for my error?
>
> I would look at your texture creation and binding.
>
>
>
> On Nov 16, 2004, at 12:07 PM, Gordon Erlebacher wrote:
>>> I never saw the glActiveTexture command. Ever. It is not in the man
>>> pages of my powerbook. Why do you need it at all?
>
> The original command was glActiveTextureARB, and the man page for that
> is still there. The ARB multitexture extension was rolled into the GL
> core in OpenGL 1.2.1, but the man pages haven't been updated since
> then. :/
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Mac-opengl mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/mac-opengl/email@hidden
This email sent to email@hidden