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

Не могу запустить OpenGL ES 3.0 в Xamarin - Xamarin

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Xamarin Хранение данных в приложении без бд http://www.cyberforum.ru/xamarin/thread1804589.html
Всем привет. Как лучше хранить небольшое количество информации, типа данных пользователя, настроек приложения, на устройстве? Первое что пришло в голову - сразу привинтить бд и считать себя классным, но это ж скажется на размере приложения. А хранить надо какую-то пару килобайт информации. Еще проскочила мысль про блокнотный файлик. Но тут мне сама затея работы с файлом не нравится. Не...
Xamarin Как заполнить ListView данными из Класса Здравствуйте. Срочно нужна помощь. Имею программу, которую берет объекты класса из WebApi. После чего они сохраняются в переменную типа List<>. Хотел узнать как точно пополнить список одной из переменной класса. Например : FirstName. http://www.cyberforum.ru/xamarin/thread1804239.html
Xamarin Архитектура приложения
всем привет. в приложении используется несколько фрагментов (из библиотек Android.Support.V7 и Android.Support.V4). на них есть кнопки, которые должны вызывать другие фрагменты. чтобы показать фрагмент, нужно сначала спрятать текущий. информация о всех фрагментах, и какой из них текущий-содержится в mainactivity. получается, что фрагмент должен а)иметь доступ к методам mainactivity, которые...
Есть литература по Xamarin и формам? Xamarin
Есть ли литература по xamarin и формам?
Xamarin Скролинг в listview http://www.cyberforum.ru/xamarin/thread1797733.html
Здравствуйте. Проблема из работой scroll в listview. Есть viewcell в котором есть текст, картинка и разное количество картинок(то есть viewcell не повторяется, а view елементов может быть разное количество, по этой же причине я не могу использовать ListViewCachingStrategy.RecycleElement, т.к. стратегия работает только, если в каждом елементе listview одинаковое количество view елементов Что...
Xamarin Изображения, image, imageview, версии xmlns и другие интересности совсем запутался в этом ксамарине. ересь какая-то. ну, начну по порядку: самое первое - какая разница между проектами, которые можно создать? есть Blank App (Native portable), Blank App (Xamarin Forms Portable), Blank Xaml App (Xamarin Forms Portable). то, что увидел я, так это что в Blank App (Native portable) нельзя нормально добавить Xamarin Forms, и там какой-то свой xaml. в Blank App... подробнее

Показать сообщение отдельно
Programmer86
0 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 16
Завершенные тесты: 1

Не могу запустить OpenGL ES 3.0 в Xamarin - Xamarin

08.09.2016, 18:19. Просмотров 388. Ответов 2
Метки (Все метки)

Здравствуйте, форумчане. Недавно начал изучать OpenGL es 3.0. Читаю книгу "opengl es 3.0 programming guide 2nd edition". Дочитал до первого примера (отрисовка треугольника) и не как не могу его запустить.
В какой момент нужно инициализировать шейдеры (Init()? Привильно ли я записываю шейдеры? На данный момент приложение просто вылетает. Буду благодарен любой помощи. (Код в вложениях)

MainActivity
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
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Content.PM;
 
namespace GraphicsEngine
{
    [Activity(Label = "GraphicsEngine",
        MainLauncher = true,
        Icon = "@drawable/icon",
        ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.KeyboardHidden
#if __ANDROID_11__
        ,HardwareAccelerated=false
#endif
        )]
    public class MainActivity : Activity
    {
        GraphicsEngine view;
 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
 
            // Create our OpenGL view, and display it
            view = new GraphicsEngine(this);
            SetContentView(view);
        }
 
        protected override void OnPause()
        {
            base.OnPause();
            view.Pause();
        }
 
        protected override void OnResume()
        {
            base.OnResume();
            view.Resume();
        }
    }
}


GraphicsEngine-OSDependent.cs
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
using System;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.ES30; //ES11;
using OpenTK.Platform;
using OpenTK.Platform.Android;
using Android.Views;
using Android.Content;
using Android.Util;
 
namespace GraphicsEngine
{
    partial class GraphicsEngine : AndroidGameView
    {
        public GraphicsEngine(Context context) : base(context)
        {
            //GLContextVersion = GLContextVersion.Gles3_0;
            ContextRenderingApi = GLVersion.ES3;
        }
 
        // This gets called when the drawing surface is ready
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
 
            // Run the render loop
            Run();
        }
 
        // This method is called everytime the context needs
        // to be recreated. Use it to set any egl-specific settings
        // prior to context creation
        //
        // In this particular case, we demonstrate how to set
        // the graphics mode and fallback in case the device doesn't
        // support the defaults
        protected override void CreateFrameBuffer()
        {
            // the default GraphicsMode that is set consists of (16, 16, 0, 0, 2, false)
            try
            {
                Log.Verbose("GLCube", "Loading with default settings");
                
                // if you don't call this, the context won't be created
                base.CreateFrameBuffer();                
                return;
            }
            catch (Exception ex)
            {
                Log.Verbose("GLCube", "{0}", ex);
            }
 
            // this is a graphics setting that sets everything to the lowest mode possible so
            // the device returns a reliable graphics setting.
            try
            {
                Log.Verbose("GLCube", "Loading with custom Android settings (low mode)");
                GraphicsMode = new AndroidGraphicsMode(0, 0, 0, 0, 0, false);
 
                // if you don't call this, the context won't be created
                Init();
                base.CreateFrameBuffer();
                
                return;
            }
            catch (Exception ex)
            {
                Log.Verbose("GLCube", "{0}", ex);
            }
            throw new Exception("Can't load egl, aborting");
        }
    }
}


GraphicsEngine.cs
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
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
using System;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.ES30; //ES11;
using OpenTK.Platform;
using OpenTK.Platform.Android;
using Android.Views;
using Android.Content;
using Android.Util;
 
namespace GraphicsEngine
{
    partial class GraphicsEngine
    {
        int mainProgrammObject = 0;
 
        bool Init()
        {
 
            int vertexShader, fragmentShader;
            int programObject;
            int linked;
 
            vertexShader = LoadShader(All.VertexShader, vShaderStr);
            fragmentShader = LoadShader(All.FragmentShader, fShaderStr);
 
            programObject = GL.CreateProgram();
 
            if (programObject == 0)
                return false;
 
            GL.AttachShader(programObject, vertexShader);
            GL.AttachShader(programObject, fragmentShader);
 
            GL.LinkProgram(programObject);
 
            GL.GetProgram(programObject, All.LinkStatus, out linked);
 
            if (linked == 0)
            {
                int infoLen = 0;
                GL.GetProgram(programObject, All.InfoLogLength, out infoLen);
                if (infoLen > 1)
                {
                    //Здесь нужен код для просмотра сообщения об ошибке вроде этого:
 
                    //char* infoLog = malloc(sizeof(char) * infoLen);
                    //glGetProgramInfoLog(programObject, infoLen, NULL, infoLog);
                    //esLogMessage("Error linking program:\n%s\n", infoLog);
                    //free(infoLog);
                }
 
                GL.DeleteProgram(programObject);
                return false;
            }
 
            mainProgrammObject = programObject;
            GL.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            return true;
        }
 
        int LoadShader(All type, string[] source)
        {
            int shader;
            int compiled;
 
            shader = GL.CreateShader(type);
 
            if (shader == 0)
                return 0;
 
            int[] len = new int[source.Length];
            for (int i = 0; i < source.Length; i++)
            {
                len[i] = source[i].Length;
            }
            
            GL.ShaderSource( shader, 1, source, (int[])null);
            GL.CompileShader(shader);
 
            GL.GetShader(shader, All.CompileStatus, out compiled);
            if (compiled == (int)All.False)
            {
                int infoLen;
                GL.GetShader(shader, All.InfoLogLength, out infoLen);
 
                if (infoLen > 1)
                {
                    //Здесь нужен код для просмотра сообщения об ошибке вроде этого:
 
                    //char* infoLog = malloc(sizeof(char) * infoLen);
                    //glGetShaderInfoLog(shader, infoLen, NULL, infoLog);
                    //esLogMessage ( "Error compiling shader:\n%s\n", infoLog );
                    //free(infoLog);
                    
                    System.Text.StringBuilder error = new System.Text.StringBuilder(infoLen);
                    GL.GetShaderInfoLog(shader, infoLen, (int[])null, error);
                    string s = error.ToString();
 
                    string ss = GL.GetString(All.ShadingLanguageVersion);
                    string ss2 = GL.GetString(All.Version);
 
                }
 
                GL.DeleteShader(shader);
                return 0;
            }
 
            return shader;
        }
 
        // This gets called on each frame render
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);
 
            float[] vVertices =
            {
                0.0f, 0.5f, 0.0f,
                -0.5f, -0.5f, 0.0f,
                0.5f, -0.5f, 0.0f
            };
 
            GL.Viewport(0, 0, 500, 500);
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.UseProgram(mainProgrammObject);
            GL.VertexAttribPointer(0, 3, All.Float, false, 0, vVertices);
            GL.EnableVertexAttribArray(0);
 
            GL.DrawArrays(All.Triangles, 0, 3);
            
 
            //GL.MatrixMode(All.Projection);
            //GL.LoadIdentity();
            //GL.Ortho(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f);
            //GL.MatrixMode(All.Modelview);
            //GL.Rotate(3.0f, 0.0f, 0.0f, 1.0f);
 
            //GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f);
            //GL.Clear((uint)All.ColorBufferBit);
 
            //GL.VertexPointer(2, All.Float, 0, square_vertices);
            //GL.EnableClientState(All.VertexArray);
            //GL.ColorPointer(4, All.UnsignedByte, 0, square_colors);
            //GL.EnableClientState(All.ColorArray);
 
            //GL.DrawArrays(All.TriangleStrip, 0, 4);
 
            //SwapBuffers();
        }
 
        string[] vShaderStr = {
            "#version 300 es                          \n",
            "layout(location = 0) in vec4 vPosition;  \n",
            "void main()                              \n",
            "{                                        \n",
            "   gl_Position = vPosition;              \n",
            "}                                        \n"
        };
 
        string[] fShaderStr = {
            "#version 300 es                              \n",
            "precision mediump float;                     \n",
            "out vec4 fragColor;                          \n",
            "void main()                                  \n",
            "{                                            \n",
            "   fragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );  \n",
            "}                                            \n"
        };
 
    }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru