Форум программистов, компьютерный форум CyberForum.ru

GLES 2 ошибка при отрисовке квадрата - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Ошибки при создании проекта в Eclipse http://www.cyberforum.ru/android-dev/thread1298178.html
Доброго времени суток. Решил попытаться освоить программирование на андроид. Поставил Eclipse, Android SDK. Загрузил компоненты для SDK. Создал проект по инструкции и сразу же выскочила куча ошибок: -error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.ActionButton'. styles_base.xml /appcompat_v7/res/values-v21 -The container...
Android Авторизация по нажатию кнопки Привет всем! В Android Studio создаю приложение с Login Activity. Там есть кнопка для отправки введенных емейл и пароль. хочу реализовать действие по ее нажатию. И пришел к такой логике: Нажимаешь на кнопку - идет проверка подключения к сети(если подключение отсутствует - выдает ошибку) - создает в бекграунд поток для подключения к серверу - берет строковые значения введенные... http://www.cyberforum.ru/android-dev/thread1297925.html
Android Не передаются данные между активити
Всем привет , возникла такая проблема при передачи данных от одной активити к другой, есть список (FragmentList) при нажатии на каждый из пунктов открывается активити с фрагментом, в котром на EditText выводится заголовок пункта списка, так вот проблема в том, что при вызове интента и передачи ему ключ/значения @Override public void onListItemClick(ListView l, View v, int position, long id) {...
Android Как в Android Studio создавать установочные apk файлы для наших гуглофонов?
Как в Android Studio создавать установочные apk файлы для наших гуглофонов? В Eclipse это проект->Android Tools->Export Signed Application Package или Export Unsigned Application Package
Android Правильно составить запрос, содержащий "'" http://www.cyberforum.ru/android-dev/thread1297107.html
Или такая запись/чтение в БД невозможна? android.database.sqlite.SQLiteException: near "Этуаль": syntax error (code 1): , while compiling: SELECT _id FROM providers WHERE name='Л'Этуаль'
Android ActionBar, всегда показывать троеточие Не могу понять, в 4.1.1 есть троеточие, а в 4.3 нету. Как принудительно сделать чтоб оно всегда было? подробнее

Показать сообщение отдельно
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589

GLES 2 ошибка при отрисовке квадрата - Android

12.11.2014, 03:36. Просмотров 444. Ответов 2
Метки (Все метки)

Здравствуйте!
Никак не пойму, в чем ошибка... В openGL полный чайник и завис на первых же шагах.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.*.*.render;
 
***
 
public class EasyRenderer implements GLSurfaceView.Renderer {
    public static final String TAG = EasyRenderer.class.getSimpleName();
    protected EasySettings settings;
    private FloatBuffer fb;
    private EasySquare square;
    private float[] viewMatrix = new float[16];
    private float[] projectionMatrix = new float[16];
    private float[] modelMatrix = new float[16];
    private float[] mvpMatrix = new float[16];
    private final int strideBytes = 7 * 4;
    private final int positionOffset = 0;
    private final int positionDataSize = 3;
    private final int colorOffset = 3;
    private final int colorDataSize = 4;
    private int mvpMatrixHandle;
    private int positionHandle;
    private int colorHandle;
 
    public EasyRenderer(EasySettings settings) {
        if(settings == null)
            throw new NullPointerException("EasySettings cannot be null!");
        this.settings = settings;
        square = new EasySquare(0, 0, 1.0f, 1.0f);
 
        fb = ByteBuffer
                .allocate(square.getCache().length * 4)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer();
 
        fb.put(square.getCache()).position(0);
 
    }
 
    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 0.5f);
 
        final float eyeX = 0.0f;
        final float eyeY = 0.0f;
        final float eyeZ = 1.5f;
 
        final float lookX = 0.0f;
        final float lookY = 0.0f;
        final float lookZ = -5.0f;
 
        final float upX = 0.0f;
        final float upY = 1.0f;
        final float upZ = 0.0f;
 
        Matrix.setLookAtM(viewMatrix, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
 
        final String vertexShader =
                "uniform mat4 u_MVPMatrix;\n"
                        + "attribute vec4 a_Position;     \n"
                        + "attribute vec4 a_Color;        \n"   
                        + "varying vec4 v_Color;          \n"
                        + "void main()                    \n"
                        + "{                              \n"
                        + "   v_Color = a_Color;          \n"
                        + "   gl_Position = u_MVPMatrix   \n"
                        + "               * a_Position;   \n"
                        + "}                              \n";
 
        final String fragmentShader =
                "precision mediump float;\n"
                        + "varying vec4 v_Color;\n"
                        + "void main()\n"
                        + "{\n"
                        + "   gl_FragColor = v_Color;\n"
                        + "}\n";
 
        int vertexShaderHandle = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
 
        if (vertexShaderHandle != 0)
        {
            GLES20.glShaderSource(vertexShaderHandle, vertexShader);
 
            GLES20.glCompileShader(vertexShaderHandle);
 
            final int[] compileStatus = new int[1];
            GLES20.glGetShaderiv(vertexShaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
 
            if (compileStatus[0] == 0)
            {
                GLES20.glDeleteShader(vertexShaderHandle);
                vertexShaderHandle = 0;
            }
        }
 
        if (vertexShaderHandle == 0)
        {
            throw new RuntimeException("Error creating vertex shader.");
        }
 
        int fragmentShaderHandle = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
 
        if (fragmentShaderHandle != 0)
        {
            GLES20.glShaderSource(fragmentShaderHandle, fragmentShader);
 
            GLES20.glCompileShader(fragmentShaderHandle);
 
            final int[] compileStatus = new int[1];
            GLES20.glGetShaderiv(fragmentShaderHandle, GLES20.GL_COMPILE_STATUS, compileStatus, 0);
 
            if (compileStatus[0] == 0)
            {
                GLES20.glDeleteShader(fragmentShaderHandle);
                fragmentShaderHandle = 0;
            }
        }
 
        if (fragmentShaderHandle == 0)
        {
            throw new RuntimeException("Error creating fragment shader.");
        }
 
        // Create a program object and store the handle to it.
        int programHandle = GLES20.glCreateProgram();
 
        if (programHandle != 0)
        {
            // Bind the vertex shader to the program.
            GLES20.glAttachShader(programHandle, vertexShaderHandle);
 
            // Bind the fragment shader to the program.
            GLES20.glAttachShader(programHandle, fragmentShaderHandle);
 
            // Bind attributes
            GLES20.glBindAttribLocation(programHandle, 0, "a_Position");
            GLES20.glBindAttribLocation(programHandle, 1, "a_Color");
 
            // Link the two shaders together into a program.
            GLES20.glLinkProgram(programHandle);
 
            // Get the link status.
            final int[] linkStatus = new int[1];
            GLES20.glGetProgramiv(programHandle, GLES20.GL_LINK_STATUS, linkStatus, 0);
 
            // If the link failed, delete the program.
            if (linkStatus[0] == 0)
            {
                GLES20.glDeleteProgram(programHandle);
                programHandle = 0;
            }
        }
 
        if (programHandle == 0)
        {
            throw new RuntimeException("Error creating program.");
        }
 
        mvpMatrixHandle = GLES20.glGetUniformLocation(programHandle, "u_MVPMatrix");
        positionHandle = GLES20.glGetAttribLocation(programHandle, "a_Position");
        colorHandle = GLES20.glGetAttribLocation(programHandle, "a_Color");
 
        GLES20.glUseProgram(programHandle);
    }
 
    @Override
    public void onSurfaceChanged(GL10 gl10, int width, int height) {
        // Set the OpenGL viewport to the same size as the surface.
        GLES20.glViewport(0, 0, width, height);
 
        final float ratio = (float) width / height;
        final float left = -ratio;
        final float right = ratio;
        final float bottom = -1.0f;
        final float top = 1.0f;
        final float near = 1.0f;
        final float far = 10.0f;
 
        Matrix.frustumM(projectionMatrix, 0, left, right, bottom, top, near, far);
    }
 
    @Override
    public void onDrawFrame(GL10 gl10) {
        GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
 
        Matrix.setIdentityM(modelMatrix, 0);
        Matrix.rotateM(modelMatrix, 0, 0, 0.0f, 0.0f, 1.0f);
        drawTriangle(fb);
    }
 
    private void drawTriangle(final FloatBuffer fb)
    {
        fb.position(positionOffset);
        GLES20.glVertexAttribPointer(positionHandle, positionDataSize, GLES20.GL_FLOAT, false,
                strideBytes, fb);
 
        GLES20.glEnableVertexAttribArray(positionHandle);
 
        fb.position(colorOffset);
        GLES20.glVertexAttribPointer(colorHandle, colorDataSize, GLES20.GL_FLOAT, false,
                strideBytes, fb);
 
        GLES20.glEnableVertexAttribArray(colorHandle);
 
        Matrix.multiplyMM(mvpMatrix, 0, viewMatrix, 0, modelMatrix, 0);
        Matrix.multiplyMM(mvpMatrix, 0, projectionMatrix, 0, mvpMatrix, 0);
 
        GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, mvpMatrix, 0);
        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 4);
    }
}


Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.*.*.objects;
 
***
 
public class EasySquare extends EasyRectangle implements RealObject, IMovement, IRotatable {
    public static final String TAG = EasySquare.class.getSimpleName();
    private float[] cache;
    private EasyColor color;
 
    public EasySquare(float x, float y, float width, float height) {
        super(x, y, width, height);
        init();
    }
 
    public EasySquare(EasyVector location, EasyVector size) {
        super(location, size);
        init();
    }
 
    private void init() {
        color = new EasyColor(0.0f, 0.0f, 0.0f);
        onUpdate();
    }
 
    @Override
    public void onDraw() {
    }
 
    @Override
    public void onUpdate() {
        float hw = width/2;
        float hh = height/2;
        float[] c = color.getColor();
        cache = new float[]
                // X       Y      Z     R     G     B     A
                {x - hw, y + hh, 0.0f, c[0], c[1], c[2], c[3],
                 x - hw, y - hh, 0.0f, c[0], c[1], c[2], c[3],
                 x + hw, y - hh, 0.0f, c[0], c[1], c[2], c[3],
                 x + hw, y + hh, 0.0f, c[0], c[1], c[2], c[3]};
    }
}


Ошибку кидает следующую:
Кликните здесь для просмотра всего текста
11-12 03:19:07.172 29250-29264/com.contedevel.boardwars E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 4904
java.lang.IllegalArgumentException: Must use a native order direct Buffer
at android.opengl.GLES20.glVertexAttribPointerBounds(Native Method)
at android.opengl.GLES20.glVertexAttribPointer(GLES20.java:1921)
at com.contedevel.easygame.render.EasyRenderer.drawTriangle(EasyRenderer.java:236)
at com.contedevel.easygame.render.EasyRenderer.onDrawFrame(EasyRenderer.java:229)


Кто знает объясните, пожалуйста, в чем может быть ошибка? (Код изначально для треугольника был, но с ним та же ошибка и в том же месте).
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru