Jump to content

  • Log In with Google      Sign In   
  • Create Account


Texture matrix problems


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 Relfos   Members   -  Reputation: 294

Like
0Likes
Like

Posted 18 November 2013 - 03:11 PM

I have written a graphical engine that works both on desktop and mobile. And with this I've written a MMO game.

The problem is, certain graphic effects are glitched on mobile, mainly those that use texture matrix multiplications.

Here's a video of the game:

 

Check out the video at 0:15, the snow effect is done with a tiled texture that is moved around with texture matrix translation. In Windows it displays correctly, but in mobile (as in the video), it seems that the texture is clamped.

 

What could cause this?


Edited by Relfos, 18 November 2013 - 03:11 PM.


Sponsor:

#2 Brother Bob   Moderators   -  Reputation: 7779

Like
3Likes
Like

Posted 18 November 2013 - 03:32 PM

The clamping could be just that; clamping. Check the texture wrapping mode to ensure that it is actually wrapping the texture coordinates and not clamping them.



#3 C0lumbo   Crossbones+   -  Reputation: 2116

Like
0Likes
Like

Posted 19 November 2013 - 12:08 PM

The clamping could be just that; clamping. Check the texture wrapping mode to ensure that it is actually wrapping the texture coordinates and not clamping them.

 

That was my thought too. Assuming your PC implementation is DirectX, it's worth knowing that texture wrapping modes are set per sampler in DirectX, so they're global, while in OpenGL the setting is applied to the texture object. Perhaps it's a bug in your abstraction layer where that difference isn't correctly reflected.



#4 L. Spiro   Crossbones+   -  Reputation: 12215

Like
1Likes
Like

Posted 20 November 2013 - 04:29 PM

As mentioned, after creating the texture you need to call:

::glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );

::glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

 

It defaults to GL_REPEAT so you are likely accidentally calling ::glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); (etc.) somewhere while that texture is bound.

 

After creating a texture and setting all of its parameters and data, always unbind the created texture to avoid accidentally changing one of its parameters just because it was left bound after creation.

To be 100% sure, as a test you can set GL_REPEAT just after binding the texture for rendering.  If it solves the problem then you have encountered the bind-to-edit problem of OpenGL (and OpenGL ES).  That isn’t a solution, however; the solution will be one of the above (or finding the accidental setting of GL_CLAMP_TO_EDGE and eliminating it).

 

 

L. Spiro


It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums

#5 Relfos   Members   -  Reputation: 294

Like
0Likes
Like

Posted 21 November 2013 - 01:15 PM

I use OpenGL for both desktop and mobile versions of the engine, so the codepath is exactly the same.

The problem is that seems that OpenGL ES 2.0 does not support wrapping in non power of 2 textures. I resized the snow texture to 256x256 and it worked.

It is a strange limitation, but oh well, now I know how to work around it



#6 mhagain   Crossbones+   -  Reputation: 7418

Like
0Likes
Like

Posted 21 November 2013 - 02:42 PM

I use OpenGL for both desktop and mobile versions of the engine, so the codepath is exactly the same.

The problem is that seems that OpenGL ES 2.0 does not support wrapping in non power of 2 textures. I resized the snow texture to 256x256 and it worked.

It is a strange limitation, but oh well, now I know how to work around it

 

It's not that strange a limitation; I'd be willing to bet that it doesn't support mipmaps on them either (confirmed - see the "Notes" section).  This is essentially what D3D9 called "conditional non-power-of-two" and what older versions of OpenGL exposed via the GL_ARB_texture_rectangle extension, which was limited non-power-of-two support with exactly these restrictions.


It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#7 L. Spiro   Crossbones+   -  Reputation: 12215

Like
0Likes
Like

Posted 21 November 2013 - 03:48 PM

Relfos, you just don’t understand the raw power…of 2.

2’s power is so great that it only takes 32 of them and you have 4,294,967,296.  Clearly 2 is a powerful number.

 

2 is clearly the God among all numbers.  The power of 2 is so great that divides and multiplies with it used to be faster (and may still be on some cards used in mobile devices) on many GPU’s.  It also has enough power to improve mipmaps.  Since each mipmap from the base up to the highest resolution doubles each time, it is by default a power-of-2 chain.  Unless you start with highest dimensions that are powers-of-2, you can’t create a mipmap chain that evenly divides in half all the way down to 1×1.

 

Low-end devices such as Android, iOS, Xbox, PlayStation 2, etc., need all the extra power they can get, and there is no greater power…than the power…

 

…of 2.

 

 

L. Spiro


It is amazing how often people try to be unique, and yet they are always trying to make others be like them. - L. Spiro 2011
I spent most of my life learning the courage it takes to go out and get what I want. Now that I have it, I am not sure exactly what it is that I want. - L. Spiro 2013
I went to my local Subway once to find some guy yelling at the staff. When someone finally came to take my order and asked, “May I help you?”, I replied, “Yeah, I’ll have one asshole to go.”
L. Spiro Engine: http://lspiroengine.com
L. Spiro Engine Forums: http://lspiroengine.com/forums




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS