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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
House15
0 / 0 / 0
Регистрация: 06.12.2010
Сообщений: 5
#1

Непонятные дела с отрисовкой - Программирование Android

16.10.2014, 01:19. Просмотров 277. Ответов 0
Метки нет (Все метки)

Не могу понять что не так с отрисовкой банального треугольника. Нет его и всё. Брал рабочий код с друго проекта, оказался не таким уж и рабочим. Тут весь код на С++.

Проблема известна: надо отрисовать треугольник на Ведроиде. Используем NDK, поэтому код весь на С++.
Для полной осведомлённости прикреплю всё в виде архива.

Заранее спасибо за помощь.

C++
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
main_func.cpp
/*
 * Copyright (C) 2009 The Android Open Source Project
 * See accompanying gl_code.cpp for license.
 */
 
#include "Ship.h"
 
static const char gVertexShader[] = 
    "attribute vec4 vPosition;\n"
    "void main() {\n"
    "  gl_Position = vPosition;\n"
    "}\n";
 
static const char gFragmentShader[] = 
    "precision mediump float;\n"
    "void main() {\n"
    "  gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
    "}\n";
GLuint gProgram;
GLuint gvPositionHandle;
 
bool setupGraphics(int w, int h) {
    printGLString("Version", GL_VERSION);
    printGLString("Vendor", GL_VENDOR);
    printGLString("Renderer", GL_RENDERER);
    printGLString("Extensions", GL_EXTENSIONS);
 
    LOGI("setupGraphics(%d, %d)", w, h);
    gProgram = createProgram(gVertexShader, gFragmentShader);
    if (!gProgram) {
        LOGE("Could not create program.");
        return false;
    }
    gvPositionHandle = glGetAttribLocation(gProgram, "vPosition");
    checkGlError("glGetAttribLocation");
    LOGI("glGetAttribLocation(\"vPosition\") = %d\n",
            gvPositionHandle);
 
    glViewport(0, 0, w, h);
    checkGlError("glViewport");
    return true;
}
 
const GLfloat gTriangleVertices[] = { 0.0f, 5.5f, -0.5f,
                  -5.5f, 5.5f, -0.5f,
                  5.5f, -5.5f, 0.0f};
 
void renderFrame() {
    static float grey;
    grey += 0.01f;
    if (grey > 1.0f) {
        grey = 0.0f;
    }
    glClearColor(grey, grey, grey, 1.0f);
    checkGlError("glClearColor");
    glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    checkGlError("glClear");
 
    glUseProgram(gProgram);
    checkGlError("glUseProgram");
 
    glVertexAttribPointer(gvPositionHandle, 3, GL_FLOAT, GL_FALSE, 0, gTriangleVertices);
    checkGlError("glVertexAttribPointer");
    glEnableVertexAttribArray(gvPositionHandle);
    checkGlError("glEnableVertexAttribArray");
    glDrawArrays(GL_TRIANGLES, 0, 3);
    checkGlError("glDrawArrays");
}
C++
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
*
 * Ship.cpp
 *
 *  Created on: 14 пїЅпїЅпїЅ. 2014 пїЅ.
 *      Author: пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
 */
 
 
#include "Ship.h"
 
// OpenGL ES 2.0 code
 
#include <jni.h>
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
void printGLString(const char *name, GLenum s) {
    const char *v = (const char *) glGetString(s);
    LOGI("GL %s = %s\n", name, v);
}
 
void checkGlError(const char* op) {
    for (GLint error = glGetError(); error; error
            = glGetError()) {
        LOGI("after %s() glError (0x%x)\n", op, error);
    }
}
 
 
GLuint loadShader(GLenum shaderType, const char* pSource) {
    GLuint shader = glCreateShader(shaderType);
    if (shader) {
        glShaderSource(shader, 1, &pSource, NULL);
        glCompileShader(shader);
        GLint compiled = 0;
        glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
        if (!compiled) {
            GLint infoLen = 0;
            glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLen);
            if (infoLen) {
                char* buf = (char*) malloc(infoLen);
                if (buf) {
                    glGetShaderInfoLog(shader, infoLen, NULL, buf);
                    LOGE("Could not compile shader %d:\n%s\n",
                            shaderType, buf);
                    free(buf);
                }
                glDeleteShader(shader);
                shader = 0;
            }
        }
    }
    return shader;
}
 
GLuint createProgram(const char* pVertexSource, const char* pFragmentSource) {
    GLuint vertexShader = loadShader(GL_VERTEX_SHADER, pVertexSource);
    if (!vertexShader) {
        return 0;
    }
 
    GLuint pixelShader = loadShader(GL_FRAGMENT_SHADER, pFragmentSource);
    if (!pixelShader) {
        return 0;
    }
 
    GLuint program = glCreateProgram();
    if (program) {
        glAttachShader(program, vertexShader);
        checkGlError("glAttachShader");
        glAttachShader(program, pixelShader);
        checkGlError("glAttachShader");
        glLinkProgram(program);
        GLint linkStatus = GL_FALSE;
        glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
        if (linkStatus != GL_TRUE) {
            GLint bufLength = 0;
            glGetProgramiv(program, GL_INFO_LOG_LENGTH, &bufLength);
            if (bufLength) {
                char* buf = (char*) malloc(bufLength);
                if (buf) {
                    glGetProgramInfoLog(program, bufLength, NULL, buf);
                    LOGE("Could not link program:\n%s\n", buf);
                    free(buf);
                }
            }
            glDeleteProgram(program);
            program = 0;
        }
    }
    return program;
}
 
 
extern "C" {
    JNIEXPORT void JNICALL Java_com_example_ark_ArkLib_init(JNIEnv * env, jobject obj,  jint width, jint height);
    JNIEXPORT void JNICALL Java_com_example_ark_ArkLib_step(JNIEnv * env, jobject obj);
};
 
JNIEXPORT void JNICALL Java_com_example_ark_ArkLib_init(JNIEnv * env, jobject obj,  jint width, jint height)
{
    setupGraphics(width, height);
}
 
JNIEXPORT void JNICALL Java_com_example_ark_ArkLib_step(JNIEnv * env, jobject obj)
{
    renderFrame();
}
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
public class GameVIew extends GLSurfaceView {
 
  public MyClassRenderer renderer; 
  
  public GameVIew(Context context) {
    super(context);
    System.out.println("ÑîçäГ*ЕѕГ¬ GameVIew");
    renderer = new MyClassRenderer(context);
    System.out.println("ÓñòГ*Г*Г*âëèâГ*ГҐГ¬ âåðèñèÿ Г*Г* 2");
        setRenderer(renderer);  
    setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
 
  }
    
      public int shotX;
      public int shotY; 
      
      private boolean running = false;
      
    
  
  public class MyClassRenderer implements GLSurfaceView.Renderer{
 
    public MyClassRenderer(Context context) {
      // TODO Auto-generated constructor stub
    }
 
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            gl.glEnable(GL10.GL_NORMALIZE);
 
            
            // Г¤Г*ëåå Г§Г*ãðóæГ*ГҐГ¬ òåêñòóðû .................. 
} 
 
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
 
            
            ArkLib.init(width, height);
    }
 
    @Override
    public void onDrawFrame(GL10 gl) {
 
            ArkLib.step();
    }
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MainActivity extends Activity {
    private GameVIew mGLSurfaceView;
     @Override
    public void onCreate(Bundle savedInstanceState){
                super.onCreate(savedInstanceState);
                 mGLSurfaceView = new GameVIew(this);
    }
 
    @Override
    protected void onPause() {
                super.onPause();
                mGLSurfaceView.onPause();
    }
 
    @Override
    protected void onResume() {
                super.onResume();
                mGLSurfaceView.onResume();
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2014, 01:19     Непонятные дела с отрисовкой
Посмотрите здесь:

Непонятные дела с жестким диском - Жесткие диски
Здравствуйте, дело в том , что жесткий диск переодически выдает ошибки и не загружает систему при включении. то пишет что-то про бут фаил,...

Непонятные дела с русскими буквами(опять) при сравнении строк - C++/CLI
Проблема такая: при сравнении некоторых строк (например, &quot;поцелуй&quot;-&quot;поцелуй&quot;) методом String::Compare, получается значение 1. Я что только...

Отрисовкой анимации - JavaFX
Проблемка в том что я циклом пытаюсь заставить кружок двигаться по панели в фрейме при нажатии кнопки старт. а он не хороший человек после...

.NET 4.x Проблема с отрисовкой карты - C# WPF
Всем привет! Наткнулся на очень полезный туториал про то, как можно реализовать отрисовку карты(http://habrahabr.ru/blogs/net/94945/) ...

Проблема с отрисовкой 3D фигуры - XNA
Здравстуйте! Я недавно начал изучать эту среду и этот язык. Использовал статью http://www.xnadev.ru/articles.php?article_id=7 для...

Проблемы с отрисовкой в MFC - Visual C++
Здравствуйте. Столкнулся с проблемой при разработке графического редактора (MFC MDI), а именно, при большом кол-ве графических...

Отрисовкой гипоциклоиды, рисуется овал - C#
Необходимо рисовать на графике кривые гипоциклоида. Проблема в том, что фигура получатся овальная, когда должна быть круглой. ...

Графический редактор (неработает с отрисовкой) - C++ Qt
//mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include &lt;QList&gt; #include &lt;QMainWindow&gt; class ScribbleArea; ...

Проблемы с отрисовкой объекта Image - Delphi
Написал игру. Стал все текстурами украшать и столкнулся с вот такой проблемой: объект Image с наложенной текстурой при движении по...

Игра Реверси: проблемы с отрисовкой в программе - C++ WinAPI
Пытаюсь написать игру Реверси. Но вот уже долго бьюсь над одной проблемой: глючит графика..или вся программа.. Причем одни и те же действия...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru