GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (183 стр.)

Сообщения на форуме пользователя Andrey (183 стр.)

Screen Shoot17 апр. 200614:38#8
Black_fox
можно и через DevIL :
// созданипе скриншота
bool OpenGLRender::CreateScreenShot(const string& filename) const
{
	//создаем скриншот для OpenGL окна
	ilutGLScreen();
	//удалить на всякий случай
	remove(filename.c_str());
	//сохраняем файл
	int res = ilSaveImage(reinterpret_cast<ILstring>(const_cast<char *>(filename.c_str())));
	if (!res) {
		//Получение кода ошибки
		int err = ilGetError();
		//Если код не равен нулю ошибка была
		if (err != IL_NO_ERROR) {
			//Получение строки с ошибкой
			const char* strError = reinterpret_cast<char*>(iluErrorString(err));
			//добавить сообщение
			OutMessage(Console::ERROR_MESSAGE, "%s%s%s", " Ошибка: ",
				strError, "\n");
			return false;
		}
	}
	return true;
}
[/cpp]
сохраняет в jpg файл про DevIL можешь почитать тут:http://www.gamedev.ru/articles/?id=70123
Проблемы с обменом значений между C/C++ и Lua.12 апр. 200620:08#70
Sneer
Спасибо большое!!! я просто в 1 месте не снимал значения со стека!!!
я пока тему закрывать не буду...
Проблемы с обменом значений между C/C++ и Lua.12 апр. 200614:19#69
Sneer
>Что и в каком количестве возвращают вызываемые функции? Ты снимаешь все результаты со стека?
всегда передаю 0, результаты со стека не снимаю.
если имя не пустое то такой случай когда загружается скрипт как ты и говорил.
почту отправлю...
Проблемы с обменом значений между C/C++ и Lua.12 апр. 200611:17#67
Sneer
>Ты опять не тот код приводишь, я его прогнал в цикле 10000 раз - никакого переполнения не происходит. Если только у тебя в Pop глюк какой-то.
нет как раз я тот код привожу :)
я сделал как ты сказал добавил отладочный метод в класс:
void LuaScriptManager::GetStackSize() const	//размер стека
{
	 if (luaState && console)
		 console->AddMessage(Console::INFO_MESSAGE, "%s%d%s",  "Current Stack size:", lua_gettop(luaState), "\n");
}

вставил я ее после вызова GetFloat и AddData после очередного в проверке стэка в AddData выскочила ошибка о переполнении.
размер стэка был > 2046
еще забвл сказать что пред получение/добавлением значений переменных
я вызываю функцию:
....
//вызываем функцию
scriptManager -> ProtectedCallFunction(scriptData[i] -> function.NumVar, scriptData[i] -> function.NumResult, 0, scriptData[i] -> function.FuncName);
..

вот код: ее код:
//защещенный вызов функции
void LuaScriptManager::ProtectedCallFunction(int nargs, int nresults, int errfunc, const string& funcName) const
{
	if (!luaState)
		return;
	//если имя не пустое
	if (!funcName.empty())
		lua_getglobal(luaState, funcName.c_str());
	int status = lua_pcall(luaState, nargs, nresults, errfunc);
	CheckError(status);
}

может тут еще что нибудь влияет?
может тебе заслать проект? 315 кб?
Проблемы с обменом значений между C/C++ и Lua.11 апр. 200618:20#65
Sneer
Привет что-то у меня опть переполнение стека возникает :)
Сейчас у меня есть набор переменных и функция их меняющая, при очередном Update я даю скрипту значения перменных которые я меняю, возникает перполнение стека, если просто получать значения переменных то все ок.
вот код:
//добавить переменную float
void LuaScriptManager::AddData(const string& varName, float value)  const
{
	if (!luaState)
		return;
	//проверка стека
	if (CheckStack()) {
		lua_pushnumber(luaState, value);
		//установка имени переменной
		lua_setglobal(luaState, varName.c_str());
	}
}
вот 'ne aeyrwb.  я вызываю при добавлении перменной по имени при иницализации
далее я получаю значение переменной по имени в Update:
//получить значение float  перменной
float LuaScriptManager::GetFloat(const string& varName, bool isPop) const
{
	if (!luaState)
		return 0;
	//на вершину стека
	lua_getglobal(luaState, varName.c_str());
	if (!lua_isnumber(luaState, -1)) {
		static int err;
		if (console && !err)
			console -> AddMessage(Console::ERROR_MESSAGE, "%s", "Lua: Data is not float\n");
		err = 1;
		return 0;
	}
	float value = static_cast<float>(lua_tonumber(luaState, -1));
	//вытолкнуть если нужно
	if (isPop)
		Pop(1); // if (luaState) lua_pop(luaState, 1);
	return value;
}
вот так я применяю это
...
float var = scriptManager -> GetFloat(scriptData[i] -> variable[j].VarName, true);
...
вот так все хорошо
но мне нужно еще возможно поменять переменную через C++ и опять дать скрипту
тогда я делаю так:
//получаю значение перменной по имени
float var = scriptManager -> GetFloat(scriptData[i] -> variable[j].VarName, true);
...
//что-то с значением делаю
//потом передаю скрипту:
scriptManager -> AddData(scriptData[i] -> variable[j].VarName, var);
...
но вскоре функция CheckStack() выдает Ошибку о перполнении стэка.
вот ее код
INLINE bool LuaScriptManager::CheckStack() const
{
	if (!luaState)
		return false;
	//проверка стека
	if (!lua_checkstack(luaState, 1)) {
		static bool err;
		if (!err)
			console -> AddMessage(Console::ERROR_MESSAGE, "%s", "Stack Lua is full\n");
		err = true;
		//return false;
	}
	return true;
}
Как мне избежать перполненипя стека, каогда нужно передавать/получать значения? где снять значения со стека?
я так понимаю AddData должна быть другой для добавления значения?
Спасибо заранее, с Уважением Андрей.

Правка: 11 апр. 2006 18:21

Зачем нужен ID3DXEffect::SetTexture?10 апр. 200617:27#7
IronBunny
>Да ну?! Без ID3DEffect нельзя использовать HLSL? Ты совсем неправ.
ну я естесвенно забыл дописать "например" к фразе  "для использования HLSL"
Кстати попутно 1 вопрос я тут безумно пытаюсь написать мультирендер и все идет неплохо но пока не дошел до шейдеров
можно ли шедей на HLSL собрать из двух файлов в 1 из них находиться пиксельный а в другом вершинный?
Зачем нужен ID3DXEffect::SetTexture?10 апр. 200611:41#5
Mephisto std
для использования HLSL
Формат mdl , .md27 апр. 200616:43#8
stim24
отослал...
Формат mdl , .md27 апр. 200611:37#6
stim24
отослал пример загрузки Md2
если нужно как работать с Direct3D могу прислать но там мои классы потянуться, будет много файлов если рвзберешься могу закинуть...
вопрос о структуре классов движка6 апр. 200616:28#1
mishak
нужны примеры это общие слова из них практически ничего не понятно.
file format *.dds6 апр. 200616:25#2
max_bi
или плагином к фотошопу
Формат mdl , .md26 апр. 200613:41#1
stim24
я загружал md2 для OpenGL и Direct3D
ID3DXSprite проблемы с сбросом устройства IDirect3DDevice94 апр. 200614:41#17
User007
Спасибо большое!!! дело было только в конструкторе копий :)
просто в обычном добавили, а в конструкторе копий не добавили в массив ID3DXSprite*
Тема закрыта.
ID3DXSprite проблемы с сбросом устройства IDirect3DDevice94 апр. 200613:34#15
User007
лови письмо, что не понятно спрашивай.
ID3DXSprite проблемы с сбросом устройства IDirect3DDevice94 апр. 200610:46#13
User007
>Эй, погоди! Девайс в оконном режиме, так?
да так.
>Ты пробовал сделать так как я посоветовал? - Достаточно в режиме отладки
>свернуть окно, зайти в параметры десктопа и изменить цвета десктопа - 16/32 бита в смысле.
пробовал, но LostDevice и без этого работает.
>Если не получится - выложи компилящийся код - я посмотрю.
там большой проект могу выслать на почту около 2 метров будет.
Высылать?

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр