Я настроил среду разработки на новом ПК и, похоже, у меня странная ошибка с Fabric. Кажется, что его контекстный менеджер cd не меняет текущий каталог, и поэтому многие мои команды не работают. Я написал тест, и он показал мне результаты, которых я не ожидал получить:
from __future__ import with_statement
from fabric.api import local, run, cd
def xxx():
with cd("src"):
local("pwd")
Вот результаты после запуска fab xxx
:
[localhost] local: pwd
/home/pioneer/workspace/myproject
Но вместо / home / pioneer / workspace / myproject
там должно быть / home / pioneer / workspace / myproject / src
, я думаю.
Я выделил соответствующий код в проект XCode, доступный здесь , но его суть - пример канонической карты текстуры:
static const GLfloat squareVertices[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat texCoords[] = {
0.125, 1.0,
0.875, 1.0,
0.125, 0.0,
0.875, 0.0
};
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
if ([context API] == kEAGLRenderingAPIOpenGLES2) {
// Use shader program.
glUseProgram(program);
glActiveTexture(GL_TEXTURE0);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glBindTexture(GL_TEXTURE_2D, texture);
// Update attribute values.
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords);
glEnableVertexAttribArray(ATTRIB_TEXCOORD);
} else {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Вершинный шейдер:
attribute lowp vec4 position;
attribute lowp vec2 tex;
varying lowp vec2 texCoord;
uniform float translate;
void main()
{
gl_Position = position;
texCoord = tex;
}
Фрагментный шейдер:
varying lowp vec2 texCoord;
uniform sampler2D texture;
void main()
{
gl_FragColor = texture2D(texture, texCoord);
}
Разделение размера прямоугольника на два удваивает частоту кадров, поэтому время рендеринга явно зависит от пространства, которое рисунок занимает на экране. В этом есть смысл, но для меня не имеет смысла то, что невозможно покрыть весь экран сетками с отображением текстуры OpenGL со скоростью более 15 кадров в секунду.
Тем не менее, существуют сотни игр, которые сделай это, так что это возможно, и я должен делать что-то не так, но что это?