forked from davidgfnet/opengx
-
-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shader textures #100
Open
mardy
wants to merge
29
commits into
devkitPro:master
Choose a base branch
from
mardy:shader-textures
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Shader textures #100
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The logic for putting return or break in the getter code is the following: if the current getter can lookup the value, it should return immediately after storing it into the output variable; otherwise, we should "break" from the switch, and then there should be a fallback code to delegate the operation to a different getter. This fixes gluBuild2DMipmaps(), which calls glGetIntegerv(GL_UNPACK_LSB_FIRST, &psm->unpack_lsb_first); and was broken by commit 94b3aab.
As a matter of fact, we already had a couple of structs for holding drawing parameters, but with this commit we unify them into a single one and use it more consistently. The DrawMode struct was also renamed with the "Ogx" prefix.
And anyway that check looks wrong, in that it affected only the vertex array, and not the other attributes as well.
The pointer is already implemented in the `for` loop. This bug went unnoticed because in most cases the SameTypeVertexReader is used instead.
Do not prepare the vertex attribute readers in advance. Instead, just store the client data in the state and build the readers just at the time when they are needed (like in glDrawArrays() and glDrawElements). Keep a "dirty" flag to avoid rebuilding them if the input data has not changed. This refactoring is a small step toward supporting arbitrary vertex attributes (needed for OpenGL 2.0+) and also allows implementing the getter methods more easily (see next commit). We also fix glInterleavedArrays(), which got broken at some point.
Add a symbol to host the list of OpenGL 2.0 functions; in functions.c we weakly define it as an empty array, but this symbol will be shadowed by the strong symbol we'll define in the new shader implementation, if OpenGL 2.0 is used.
This will depend on whether the client actually uses any OpenGL 2.0 functionality.
We might be using this in more places.
Rework the existing internal function so that it can be used with matrices passed by the client. This function will be declared in a public header used by clients who need to write their own shaders (OpenGL >= 2.0).
Part of this API will be made public in some later commit to allow it to be used by developers writing shader replacements. For this goal, a more flexible API is introduced, where vertex attribute arrays can be added from a OgxVertexAttribArray structure provided by the client.
As the comment was saying, these objects are just for optimization purposes and do not really belong to the global state variable. Add a function to array.h so that other parts of the code can retrieve them if needed, and move the actual variables as static variables in array.c.
Instead of keeping named variables, store all readers into one array. This helps in simplifying a bit the code.
These are in the public domain.
This is not yet complete and is likely to be buggy in many aspects, but it allows running a non totally trivial example (the famous glgears), which will be added in a later commit. Among the known limitations: - The API exposed to the client developer for implementing the shaders is not finalized. - Texturing is not yet implemented.
In this way the examples (and any other binary we should add to the project) will automatically gain an include path to the src/directoy when building against opengx. This will allow them to find the "opengx.h" file.
So we can rotate the gears on the console, too.
The association of a VBO to an array is to be saved in the client state: we should look up the VBO only when we draw some geometry. The error was discovered running the cube_tex example (it will be added to the repo in a later commit), which uses two different VBOs for the position and texture coordinate attributes.
This example uses SDL2 and glm. At the moment this example does not work on the Wii/GameCube, as the textured rendering using OpenGL 2.0 will come in a later commit. The "common" directory contains textures that get embedded into the executable, so that examples can be written without access to external files (which makes testing on the console -- or on the emulator -- very straightforward).
Colors are often specifies as a 3 or 4 long vector of floats, but GX does not support specifying colors using floating point components. Therefore, convert such values to GXColor.
The data here is just an integer number representing the texture unit bound to the uniform.
This is all what is needed to let the client developer write a GX shader capable of supporting textured geometries.
This is a bit primitive, because we are hardcoding the texture stage and other TEV variables (we'll improve this later), but it does the job.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Support for using textures in OpenGL 2.0 shader implementations.
Built on top of #99, it must be merged after that.