void ApplicationManager::luaError(const char *error) { glog_e("%s", error); if (player_ == true) { running_ = false; networkManager_->printToServer(error, -1); networkManager_->printToServer("\n", -1); application_->deinitialize(); application_->initialize(); } else { JNIEnv *env = g_getJNIEnv(); jstring jerrormsg = env->NewStringUTF(error); jclass localRefCls = env->FindClass("com/giderosmobile/android/player/GiderosApplication"); jmethodID throwError = env->GetStaticMethodID(localRefCls, "throwLuaException", "(Ljava/lang/String;)V"); env->CallStaticVoidMethod(localRefCls, throwError, jerrormsg); env->DeleteLocalRef(jerrormsg); env->DeleteLocalRef(localRefCls); //g_exit(); } }
PrintStackChecker::~PrintStackChecker() { int end = lua_gettop(L); if (begin_ + delta_ == end) ; else glog_e("*%s* stack NOT ok begin:%d end:%d delta:%d", pre_, begin_, end, delta_); }
void dx11ShaderProgram::drawArrays(ShapeType shape, int first, unsigned int count) { ShaderEngine::Engine->prepareDraw(this); activate(); updateConstants(); if (shape == Point) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); else if (shape == TriangleStrip) g_devcon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); else if (shape == TriangleFan) { D3D11_MAPPED_SUBRESOURCE ms; int ntris = count - 2; ID3D11Buffer *vbo = getGenericVBO(0, 2, 1, 3 * ntris); g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer unsigned short *i = (unsigned short *) ms.pData; for (int t = 0; t < ntris; t++) { *(i++) = first; *(i++) = first + t + 1; *(i++) = first + t + 2; } g_devcon->Unmap(vbo, NULL); // unmap the buffer g_devcon->IASetIndexBuffer(vbo, DXGI_FORMAT_R16_UINT, 0); curIndicesVBO = vbo; g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); g_devcon->DrawIndexed(ntris * 3, 0, 0); return; } else if (shape == Triangles) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); else if (shape == LineLoop) { D3D11_MAPPED_SUBRESOURCE ms; ID3D11Buffer *vbo = getGenericVBO(0, 2, 1, count + 1); g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer unsigned short *i = (unsigned short *) ms.pData; for (int t = 0; t < count; t++) *(i++) = first + t; *(i++) = first; g_devcon->Unmap(vbo, NULL); // unmap the buffer g_devcon->IASetIndexBuffer(vbo, DXGI_FORMAT_R16_UINT, 0); curIndicesVBO = vbo; g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP); g_devcon->DrawIndexed(count + 1, 0, 0); return; } else if (shape == Lines) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); else { glog_e("glDrawArrays unknown pattern\n"); exit(1); } g_devcon->Draw(count, 0); }
void ApplicationManager::luaError(const char *error) { glog_e("%s", error); { /* JNIEnv *env = g_getJNIEnv(); jstring jerrormsg = env->NewStringUTF(error); jclass localRefCls = env->FindClass("com/giderosmobile/android/player/GiderosApplication"); jmethodID throwError = env->GetStaticMethodID(localRefCls, "throwLuaException", "(Ljava/lang/String;)V"); env->CallStaticVoidMethod(localRefCls, throwError, jerrormsg); env->DeleteLocalRef(jerrormsg); env->DeleteLocalRef(localRefCls); //g_exit(); */ } }
void dx11ShaderProgram::drawElements(ShapeType shape, unsigned int count, DataType type, const void *indices, bool modified, ShaderBufferCache **cache,unsigned int first,unsigned int dcount) { ShaderEngine::Engine->prepareDraw(this); activate(); updateConstants(); int indiceSize = 4; DXGI_FORMAT iFmt = DXGI_FORMAT_R32_UINT; if (type == DUSHORT) { indiceSize = 2; iFmt = DXGI_FORMAT_R16_UINT; } D3D11_MAPPED_SUBRESOURCE ms; ID3D11Buffer *vbo = cache ? getCachedVBO(cache, true, indiceSize, 1, count) : getGenericVBO(0,indiceSize,1,count); if (modified || (!cache)) { g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer memcpy(ms.pData, indices, indiceSize * count); // copy the data g_devcon->Unmap(vbo, NULL); // unmap the buffer } UINT stride = indiceSize; UINT offset = 0; if ((curIndicesVBO != vbo) || (!cache)) { g_devcon->IASetIndexBuffer(vbo, iFmt, 0); curIndicesVBO = vbo; } if (shape == Point) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); else if (shape == TriangleStrip) g_devcon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); else if (shape == Triangles) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); else if (shape == LineLoop) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP); else if (shape == Lines) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); else { glog_e("glDrawElements: bad mode\n"); exit(1); } g_devcon->DrawIndexed(dcount?dcount:count, first, 0); }
void dx11ShaderProgram::drawArrays(ShapeType shape, int first, unsigned int count) { ShaderEngine::Engine->prepareDraw(this); activate(); updateConstants(); if (shape == Point) { if (flags&ShaderProgram::Flag_PointShader) { D3D11_MAPPED_SUBRESOURCE ms; int ntris = count; bool changed = ((genVBO[0] == NULL) || (genVBOcapacity[0] < (6 * ntris))); //We should really check if first is still the same here, but current gideros code uses 0 for Point Shaders ID3D11Buffer *vbo = getGenericVBO(0, 2, 1, 6 * ntris); if (changed) { g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer unsigned short *i = (unsigned short *)ms.pData; for (int t = 0; t < ntris; t++) { unsigned short b = (first + t) * 4; *(i++) = b + 0; *(i++) = b + 1; *(i++) = b + 2; *(i++) = b + 0; *(i++) = b + 2; *(i++) = b + 3; } g_devcon->Unmap(vbo, NULL); // unmap the buffer } g_devcon->IASetIndexBuffer(vbo, DXGI_FORMAT_R16_UINT, 0); curIndicesVBO = vbo; g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); g_devcon->DrawIndexed(ntris * 6, 0, 0); return; } else g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); } else if (shape == TriangleStrip) g_devcon->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); else if (shape == TriangleFan) { D3D11_MAPPED_SUBRESOURCE ms; int ntris = count - 2; ID3D11Buffer *vbo = getGenericVBO(0, 2, 1, 3 * ntris); g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer unsigned short *i = (unsigned short *) ms.pData; for (int t = 0; t < ntris; t++) { *(i++) = first; *(i++) = first + t + 1; *(i++) = first + t + 2; } g_devcon->Unmap(vbo, NULL); // unmap the buffer g_devcon->IASetIndexBuffer(vbo, DXGI_FORMAT_R16_UINT, 0); curIndicesVBO = vbo; g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); g_devcon->DrawIndexed(ntris * 3, 0, 0); return; } else if (shape == Triangles) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); else if (shape == LineLoop) { D3D11_MAPPED_SUBRESOURCE ms; ID3D11Buffer *vbo = getGenericVBO(0, 2, 1, count + 1); g_devcon->Map(vbo, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms); // map the buffer unsigned short *i = (unsigned short *) ms.pData; for (int t = 0; t < count; t++) *(i++) = first + t; *(i++) = first; g_devcon->Unmap(vbo, NULL); // unmap the buffer g_devcon->IASetIndexBuffer(vbo, DXGI_FORMAT_R16_UINT, 0); curIndicesVBO = vbo; g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINESTRIP); g_devcon->DrawIndexed(count + 1, 0, 0); return; } else if (shape == Lines) g_devcon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); else { glog_e("glDrawArrays unknown pattern\n"); exit(1); } g_devcon->Draw(count, 0); }