Java-Gaming.org Hi !
Featured games (83)
games approved by the League of Dukes
Games in Showcase (538)
Games in Android Showcase (132)
games submitted by our members
Games in WIP (601)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  GLSL How to access UNIFORM array?  (Read 725 times)
0 Members and 1 Guest are viewing this topic.
Offline trollwarrior1
« Posted 2014-01-04 07:35:13 »

Turns out you cannot access UNIFORM array, which hasn't been created with certain size, with integers that are created within the void main() method/function
If you want to access UNIFORM array that hasn't been created with specified size, you will have to type in a "static" number.
This code will work nicely.
1  
2  
3  
4  
5  
   uniform float[] myArray = float[](0, 10, 20);
   
   void main() {
      float x = myArray[0];
   }


This code won't compile.
1  
2  
3  
4  
5  
6  
   uniform float[] myArray = float[](0, 10, 20);
   
   void main() {
      int index = 0;
      float x = myArray[index];
   }


If you want to access your UNIFORM array with "index", you will need to do this.
1  
2  
3  
4  
5  
6  
   uniform float[3] myArray = float[3](0, 10, 20);
   
   void main() {
      int index = 0;
      float x = myArray[index];
   }
Offline quew8

JGO Coder


Medals: 32



« Reply #1 - Posted 2014-01-04 13:33:34 »

I have found that this kind of thing is somewhat dependent on the particular compiler your vendor has used. Some are more lenient with what will compile, some are very strict. It's extremely annoying but very few compilers actually break the rules (ie don't follow the specification) so you can't really call them on it. The more recent drivers tend to be fine however.

Did you have an actual question?
Offline Danny02
« Reply #2 - Posted 2014-01-04 14:54:22 »

In general AMD is strict to the rules and Nvidia takes pretty much any code you throw at it (i.e. you can use HLSL or CG functions).
On the other hand you can use
#pragma optionNV(strict on)
to force Nvidia to be strict.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline davedes
« Reply #3 - Posted 2014-01-04 14:55:08 »

Some more tips for cross-platform uniform access:

1. Initializing uniforms (and arrays) with default values was only added in GLSL 120 +. Make sure you add
#version 120
to the top of your shader.

2. It's usually good practice to specify a length:
1  
float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);


3. Certain drivers will not support dynamic indexing. For example, if you're using GL ES (WebGL, iOS, etc) then don't expect dynamic indexing of uniforms to work across all platforms. In your case the index won't be dynamic, but it's best just to stick to "static" indices where possible.

4. Initializing arrays in the shader doesn't work at all in Mac OSX <= 1.7. I haven't tested later versions of OSX.

5. You can access certain elements of an array by including the index in the name when using glGetUniformLocation:
1  
 glGetUniformLocation( program, "LightPos[0]" ) 


Oddly, in WebGL, I found this was the only way I could update an entire array of values with glUniform4fv.

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

rwatson462 (30 views)
2014-12-15 09:26:44

Mr.CodeIt (20 views)
2014-12-14 19:50:38

BurntPizza (42 views)
2014-12-09 22:41:13

BurntPizza (76 views)
2014-12-08 04:46:31

JscottyBieshaar (37 views)
2014-12-05 12:39:02

SHC (51 views)
2014-12-03 16:27:13

CopyableCougar4 (48 views)
2014-11-29 21:32:03

toopeicgaming1999 (115 views)
2014-11-26 15:22:04

toopeicgaming1999 (103 views)
2014-11-26 15:20:36

toopeicgaming1999 (30 views)
2014-11-26 15:20:08
Resources for WIP games
by kpars
2014-12-18 10:26:14

Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!