в общем вроде баг

хотя может опять мне кажется

)
вот этот класс:

class bug{
public:
Engine *eng;
Scene *s;
int segments;
Entity *body;
Surface *surf;
bug(Scene *sc){
eng = Engine::Instance();
s=sc;
segments=256;
surf=CreateSurface(segments);
body = s->Add(surf);
StandartShaders::Render::OnlyNormals()->SetUniform(Shader::SU_LIGHTPOS,vec3(0,5,7));
body->SetShader(StandartShaders::Render::OnlyNormals());
body->SetPosition(-2,-2,-6);
}
Surface* CreateSurface(int segments)
{
Engine *eng = Engine::Instance();
//считаю количество точек
int count_vertices = (segments+1)*(segments+1);
//считаю трианглы
int count_indices = 3*segments*segments;
//создание поверхности
Surface *surf = eng->CreateSurface(count_vertices,count_indices);
surf->Lock();
//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
for(int j=0;j<=segments;j++){
vec3 position(i-0.5*segments,0,j-0.5*segments);
vec3 normal(0,1,0);
surf->SetVertexPosition(index,position);
surf->SetVertexNormal(index,normal);
surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
index++;
}}
//ставлю полигоны
int trian_index=0;
for(int i=0;i<segments;i++){
for(int j=0;j<segments;j++){
//вычисляю для текущей клетки индексы точек в углах
int v0,v1,v2,v3;
//i - текущий ряд // j-текущий столбец
v0=i*(segments+1)+j;
v1=v0+1;
v2=v0+segments+1;
v3=v2+1;
surf->SetTriangle(trian_index,v0,v1,v2);
trian_index++;
surf->SetTriangle(trian_index,v1,v3,v2);
trian_index++;
}}
surf->RecalcTangents();
surf->UnLock();
return surf;
}
void Update(){
surf->Lock();
//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
for(int j=0;j<=segments;j++){
vec3 position(i-0.5*segments,0,j-0.5*segments);
vec3 normal(0,1,0);
surf->SetVertexPosition(index,position);
surf->SetVertexNormal(index,normal);
surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
index++;
}}
surf->UnLock();
}
};
создается там внутри поверхность.
потом вот этим методом делаю вид что переставил точки. вызываю его каждый кадр.
void Update(){
surf->Lock();
//ставлю точки куда следует
int index=0;
for(int i=0;i<=segments;i++){
for(int j=0;j<=segments;j++){
vec3 position(i-0.5*segments,0,j-0.5*segments);
vec3 normal(0,1,0);
surf->SetVertexPosition(index,position);
surf->SetVertexNormal(index,normal);
surf->SetVertexTexCoord(index,0.01+0.97*i/(float)segments,0.01+0.97*j/(float)segments,0);
index++;
}}
surf->UnLock();
}
В итоге оно сжирает всю память и падает. Как мне кажется это не есть хорошо.
Еще мои творения падают если текстуры назначать не по порядку.
в смысле если дать например на 0 слой любую, а потом на любой кроме 1 то приложение при запуске крэшится, хотя компилится без проблем.
плюс с назначением вторых текстурных координат какой-то странный косяк.