Project

General

Profile

Download (5.94 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / uniformblock / UniformBlockAssociation.java @ 835b197e

1 97755c02 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20 de77a6c5 Leszek Koltunski
package org.distorted.library.uniformblock;
21 97755c02 Leszek Koltunski
22
import android.opengl.GLES30;
23
24
import org.distorted.library.main.InternalBuffer;
25 7958d843 Leszek Koltunski
import org.distorted.library.mesh.MeshBase;
26 97755c02 Leszek Koltunski
27
///////////////////////////////////////////////////////////////////////////////////////////////////
28 de77a6c5 Leszek Koltunski
/**
29
 * Not part of public API, do not document
30
 *
31
 * @y.exclude
32
 */
33
public class UniformBlockAssociation
34 97755c02 Leszek Koltunski
  {
35
  private static final int DEFAULT_ASSOCIATION = 0xffffffff;
36 073e5a7a Leszek Koltunski
  private static final int DEFAULT_STRIDE = 4;
37 80961fc1 Leszek Koltunski
  private static final int LOC_AND = 0;
38
  private static final int LOC_EQU = 1;
39 97755c02 Leszek Koltunski
40 78ff6ea9 Leszek Koltunski
  private final InternalBuffer mUBO;
41 7958d843 Leszek Koltunski
  private final int mMax;
42 80961fc1 Leszek Koltunski
  private int[] mAssociations;
43
  private int mStride;
44 97755c02 Leszek Koltunski
45
///////////////////////////////////////////////////////////////////////////////////////////////////
46 41b3ada0 Leszek Koltunski
47 de77a6c5 Leszek Koltunski
  public UniformBlockAssociation()
48 97755c02 Leszek Koltunski
    {
49 7958d843 Leszek Koltunski
    mMax = MeshBase.getMaxEffComponents();
50 80961fc1 Leszek Koltunski
    mStride = DEFAULT_STRIDE;
51 7958d843 Leszek Koltunski
    mAssociations= new int[mStride*mMax];
52 97755c02 Leszek Koltunski
53 7958d843 Leszek Koltunski
    for(int i=0; i<mMax; i++)
54 97755c02 Leszek Koltunski
      {
55 80961fc1 Leszek Koltunski
      mAssociations[mStride*i+LOC_AND] = DEFAULT_ASSOCIATION;
56
      mAssociations[mStride*i+LOC_EQU] = i;
57 97755c02 Leszek Koltunski
      }
58
59
    mUBO = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ);
60
    }
61
62
///////////////////////////////////////////////////////////////////////////////////////////////////
63
64 de77a6c5 Leszek Koltunski
  public UniformBlockAssociation(UniformBlockAssociation original)
65 97755c02 Leszek Koltunski
    {
66 7958d843 Leszek Koltunski
    mMax = original.mMax;
67 80961fc1 Leszek Koltunski
    mStride = original.mStride;
68 97755c02 Leszek Koltunski
    int size = original.mAssociations.length;
69
    mAssociations= new int[size];
70
    System.arraycopy(original.mAssociations, 0, mAssociations, 0, size);
71
72
    mUBO = new InternalBuffer(GLES30.GL_UNIFORM_BUFFER, GLES30.GL_STATIC_READ);
73
    }
74
75 80961fc1 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
76 41ed3f0d Leszek Koltunski
// stride can be 0, if we just tried compiling a vertex shader which has NUM_VERTEX=0.
77 835b197e Leszek Koltunski
// stride==1 we also don't like because then we have an exception ( stride*mMax-1 < stride*(mMax-1)+1 )
78 80961fc1 Leszek Koltunski
79
  public void correctStride(int stride)
80
    {
81 835b197e Leszek Koltunski
    if( mStride != stride && stride>1 )
82 80961fc1 Leszek Koltunski
      {
83 7958d843 Leszek Koltunski
      int[] tmp = new int[stride*mMax];
84 80961fc1 Leszek Koltunski
85 7958d843 Leszek Koltunski
      for(int i=0; i<mMax; i++)
86 80961fc1 Leszek Koltunski
        {
87
        tmp[stride*i+LOC_AND] = mAssociations[mStride*i+LOC_AND];
88
        tmp[stride*i+LOC_EQU] = mAssociations[mStride*i+LOC_EQU];
89
        }
90
91
      mAssociations = tmp;
92
      mStride = stride;
93
      }
94
    }
95
96 97755c02 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
97
98 de77a6c5 Leszek Koltunski
  public boolean matchesAssociation( int comp, int andAssoc, int equAssoc)
99 728a7820 Leszek Koltunski
    {
100 80961fc1 Leszek Koltunski
    return (andAssoc & mAssociations[mStride*comp+LOC_AND]) != 0 || (equAssoc == mAssociations[mStride*comp+LOC_EQU]);
101 728a7820 Leszek Koltunski
    }
102 97755c02 Leszek Koltunski
103
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105 de77a6c5 Leszek Koltunski
  public void setEffectAssociationNow(int comp, int andAssociation, int equAssociation)
106 728a7820 Leszek Koltunski
    {
107 80961fc1 Leszek Koltunski
    mAssociations[mStride*comp+LOC_AND] = andAssociation;
108
    mAssociations[mStride*comp+LOC_EQU] = equAssociation;
109 97755c02 Leszek Koltunski
110 728a7820 Leszek Koltunski
    mUBO.invalidate();
111
    }
112 97755c02 Leszek Koltunski
113
///////////////////////////////////////////////////////////////////////////////////////////////////
114
115 de77a6c5 Leszek Koltunski
  public int getIndex()
116 728a7820 Leszek Koltunski
    {
117 7958d843 Leszek Koltunski
    return mUBO.createImmediatelyInt( 4*mStride*mMax, mAssociations);
118 728a7820 Leszek Koltunski
    }
119 97755c02 Leszek Koltunski
120
///////////////////////////////////////////////////////////////////////////////////////////////////
121
122 de77a6c5 Leszek Koltunski
  public void copy(int compTo, UniformBlockAssociation assocFrom, int compFrom)
123 728a7820 Leszek Koltunski
    {
124 80961fc1 Leszek Koltunski
    mAssociations[mStride*compTo+LOC_AND] = assocFrom.mAssociations[mStride*compFrom+LOC_AND];
125
    mAssociations[mStride*compTo+LOC_EQU] = assocFrom.mAssociations[mStride*compFrom+LOC_EQU];
126 728a7820 Leszek Koltunski
    }
127
128 8b36dabf Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
129
130 de77a6c5 Leszek Koltunski
  public void markForDeletion()
131 8b36dabf Leszek Koltunski
    {
132
    mUBO.markForDeletion();
133
    }
134
135 728a7820 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
136
137 de77a6c5 Leszek Koltunski
  public void print()
138 728a7820 Leszek Koltunski
    {
139
    StringBuilder builder = new StringBuilder();
140
141
    builder.append(mUBO.getID());
142
    builder.append(' ');
143
144
    for(int i=0; i<8; i++)
145
      {
146 80961fc1 Leszek Koltunski
      builder.append(mAssociations[mStride*i+LOC_AND]);
147 728a7820 Leszek Koltunski
      builder.append(' ');
148 80961fc1 Leszek Koltunski
      builder.append(mAssociations[mStride*i+LOC_EQU]);
149 728a7820 Leszek Koltunski
      builder.append(' ');
150
      }
151
152
    String res = builder.toString();
153
154
    android.util.Log.e("uba", res);
155
    }
156 97755c02 Leszek Koltunski
  }