LINUX.ORG.RU

Сообщения Int64

 

Мой проект e2dit, помогите советом

Всем привет, недавно выкладывал скриншот: Мой редактор уровней, в разработке
выложил исходный код: https://github.com/sysint64/e2dit.git

Очевидно что и код, и структура мягко говоря не очень, решил переоформить все, сделать сборку через cmake итд. И так как хочется все красиво сделать, хотелось бы совета у сообщества.
Сейчас начал новую структуру накидывать и получилось как-то так:

src/
   core/{*.h,*.cpp}
   math/{*.h,*.cpp}
   renderer/{*.h,*.cpp}
   system/{*.h,*.cpp}
   ui/{*.h,*.cpp}
res/
   ui/
   strings/

Пока так, там будет расширяться, ну и в данный момент у меня в основном файле у меня просто ужас:
#define GLEW_STATIC
#define GLM_FORCE_RADIANS
#define GLM_SWIZZLE
//#define GLM_FORCE_AVX for x86_64
#define GLM_FORCE_INLINE
#define GLM_FORCE_PURE

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/matrix_access.hpp>
#include <glm/gtx/fast_square_root.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <glm/gtc/quaternion.hpp>
#include <glm/gtx/vector_angle.hpp>
//

#include "GL/glew.h"
//#include "GL/wglew.h"

#ifdef _win_
	#include "windows.h"
#endif
//
#include <string>
#include <vector>
#include <stack>
#include <map>
#include <math.h>
#include <stdexcept>
#include <clocale>
#include <locale>
#include <iconv.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>

#ifdef _linux_
	#include <mntent.h>
#endif

#include <unistd.h>
//
using namespace std;
//
void Terminate (const int type);
//
#include "Engine/Logger.h"

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
//#include <SFML/Window/Mouse.hpp>

#include <iostream>
#include <pthread.h>

#include <SOIL/SOIL.h>
#include <FTGL/ftgl.h>

Решил начать с этого, как лучше все это по папкам распихать, думал все инклуды с glm перенести в math/main.h но может не лучшее решение. Так же думал все инклуды из std вынести в какойнить файл, например в system/main.h. Хотелось бы услышать ваши идеи и предпочтения.

 ,

Int64
()

Использовать GPL в коммерческом проекте

Возможно ли это? я почти доделал программу, и хочу выпускать ее под лицензией GPL, и делаю другой проект, и мне необходимо, чтобы этот коммерческий проект мог поставляться вместе с первым GPL'овским проектом. Может просто в установщик сделать пункт : «Установить программу с GPL лицензией?», и если выбран этот пункт, то выкачивать из интернета установщик программы GPL и запускать, и вроде как бы и не нарушаю тогда условия GPL, или все таки нарушаю?

 , ,

Int64
()

Реализация Undo, Redo

Всем привет, как грамотно реализовать Undo и Redo в программе, где много различных параметров меняется, я думал отслеживать каждый шаг пользователя и записывать в историю, для каждого пункта истории сделать функции Undo и Redo, но тут получается для каждого определенного действия придется наследовать общий класс какой-то, например для удаления объекта, наследуем класс BaseHistoryElement и переписываем функции Undo, Redo в Undo меняем флаг deleted = false; ну и для Redo собственно наоборот. Но с таким подходом очень много кода выйдет для каждого действия, вот и интересно, может есть какой-то более правильный подход?

 

Int64
()

Восстановление данных с SSD

Всем привет, случайно отформатировал диск на котором операционная система, отформатировал быстро, т.е. удалил только таблицу, можно ли полностью все восстановить, и чтобы операционка тоже заработала?

Int64
()

SFML 2.1 Maximize

Нужно создать окно в развернутом виде, как это сделать? На офф. сайте ничего не нашел.

 ,

Int64
()

Отключить оптимизации для функции

Всем привет, при компиляции с флагом -O0 программа работает идеально, стоит добавить -O1 функция проверки пересечения 2х прямых перестает работать, можно ли отключить оптимизации для этой функции? Код функции:

#define EPS 0.00001f

bool Intersect (glm::vec2 A, glm::vec2 B) {
		glm::vec2 p1 = v1->Pos;
		glm::vec2 p2 = v2->Pos;
		//
		float rTop = (A.y-p1.y)*(p2.x-p1.x)-(A.x-p1.x)*(p2.y-p1.y);
		float sTop = (A.y-p1.y)*(B.x-A.x)-(A.x-p1.x)*(B.y-A.y);
		float rBot = (B.x-A.x)*(p2.y-p1.y)-(B.y-A.y)*(p2.x-p1.x);
		float sBot = (B.x-A.x)*(p2.y-p1.y)-(B.y-A.y)*(p2.x-p1.x);
		//
		if (rBot == 0 || sBot == 0)
			return false;
		//
		float r = rTop/rBot;
		float s = sTop/sBot;

		if (r > EPS && r < 1.0f-EPS && s > EPS && s < 1.0f-EPS)
			return true;

		return false;
	}

есть еще другая функция, через скалярное произведение векторов, но для моей задачи она иногда работает не точно, а эта функция всегда хорошо определяла, есть ли пересечение, или нету.

 ,

Int64
()

Какую клавиатуру лучше взять

Всем привет, сломалось у меня клавиатура, не знаю теперь какую взять, хотел взять точно такую же как была, но нигде не нашел ее. Плоские клавиатуры очень не люблю, поэтому сейчас остановился на вот этих двух:
http://www.microsoft.com/hardware/en-us/b/sculpt-comfort-keyboard-for-business
http://www.microsoft.com/hardware/en-us/p/natural-ergonomic-keyboard-4000/B2M...

обязательно нужна эргономичная клавиатура, вот не знаю, на сколько будет удобная первая, боюсь ее брать, а на второй уже работал, и в принципе привыкнуть можно к ней.

Int64
()

парсинг смайлов

Всем привет, возникла такая проблема, создал форум на phpbb3, но там оказалась проблема со смайликами, только один смайл парсится, остальные остаются в виде кода смайла, после перехода на новую строку смайлик снова парсится. Выяснил что ошибка где-то в этой функции, но т.к. я с регулярными выражениями умею работать только в текстовом редакторе, для поиска, то нужна ваша помощь:

	/**
	* Parse Smilies
	*/
	function smilies($max_smilies = 0)
	{
		global $db, $user;
		static $match;
		static $replace;

		// See if the static arrays have already been filled on an earlier invocation
		if (!is_array($match))
		{
			$match = $replace = array();

			// NOTE: obtain_* function? chaching the table contents?

			// For now setting the ttl to 10 minutes
			switch ($db->sql_layer)
			{
				case 'mssql':
				case 'mssql_odbc':
				case 'mssqlnative':
					$sql = 'SELECT *
						FROM ' . SMILIES_TABLE . '
						ORDER BY LEN(code) DESC';
				break;

				case 'firebird':
					$sql = 'SELECT *
						FROM ' . SMILIES_TABLE . '
						ORDER BY CHAR_LENGTH(code) DESC';
				break;

				// LENGTH supported by MySQL, IBM DB2, Oracle and Access for sure...
				default:
					$sql = 'SELECT *
						FROM ' . SMILIES_TABLE . '
						ORDER BY LENGTH(code) DESC';
				break;
			}
			$result = $db->sql_query($sql, 600);

			while ($row = $db->sql_fetchrow($result))
			{
				if (empty($row['code']))
				{
					continue;
				}

				// (assertion)
				$match[] = preg_quote($row['code'], '#');
				$replace[] = '<!-- s' . $row['code'] . ' --><img src="{SMILIES_PATH}/' . $row['smiley_url'] . '" alt="' . $row['code'] . '" title="' . $row['emotion'] . '" /><!-- s' . $row['code'] . ' -->';
			}
			$db->sql_freeresult($result);
		}

		if (sizeof($match))
		{
			if ($max_smilies)
			{
				// 'u' modifier has been added to correctly parse smilies within unicode strings
				// For details: http://tracker.phpbb.com/browse/PHPBB3-10117
				$num_matches = preg_match_all('#(?<=^|[\n .])(?:' . implode('|', $match) . ')(?![^<>]*>)#u', $this->message, $matches);
				unset($matches);

				if ($num_matches !== false && $num_matches > $max_smilies)
				{
					$this->warn_msg[] = sprintf($user->lang['TOO_MANY_SMILIES'], $max_smilies);
					return;
				}
			}

			// Make sure the delimiter # is added in front and at the end of every element within $match
			// 'u' modifier has been added to correctly parse smilies within unicode strings
			// For details: http://tracker.phpbb.com/browse/PHPBB3-10117

			$this->message = trim(preg_replace(explode(chr(0), '#(?<=^|[\n .])' . implode('(?![^<>]*>)#u' . chr(0) . '#(?<=^|[\n .])', $match) . '(?![^<>]*>)#u'), $replace, $this->message));
		}
	}

Int64
()

Свой менеджер памяти

Всем привет, ради интереса решил написать свой язык программирования, почти доделал, вот теперь решил сделать менеджер памяти для выделения памяти динамическим массивам и классам. Я написал пулловый аллокатор, но не совсем понятно как правильно пользоваться им, у меня есть буфер, в который записываются данные, и у каждого буфера размер чанка фиксированный, я думал сделать размер одного буфера равной размеру одной страницы, но не уверен что так правильно, ну и в зависимости от того, сколько нужно памяти, выбирается нужный буфер. Размеры чанков хочу менять по логарифмической шкале. Ну так вот вопрос в том, правильно ли я все понял?

 

Int64
()

G++ отключение ошибок

Нужно чтобы при первой же ошибки компиляция завершалась, а не продолжала бы выдавать кучу ошибок, возможно ли это в g++?

 

Int64
()

css с макросами (забыл название)

Всем привет, давно читал статью на хабре про какую-то новую каскадную таблицу стилей, тот же css только с макросами, хочу вот опробовать его, а название забыл.

 

Int64
()

С++ для мобильных платформ

Всем привет, читал где-то что можно использовать С++ для написания мобильных приложений, вот вопросы которые мне интересны:
на iOS так же можно писать на С++?
если да то как сильно код будет отличаться от кода для андроида?
какие библиотеки стоит использовать для мобилок, помимо OpenGL ES, например для воспроизведения звука, для кроссплатформенного управления мултитачем, для физики?
ну и самое главное, как скомпилировать для андроид и для iOS приложение?

Int64
()

формы submit

Как сделать чтобы при отправке запроса на форме ничего не происходило? чтобы никуда не перенаправлялось, пытался делать что-то подобное:

<form id = 'login_form' action = '#'>
...
но все равно отправляет запрос.

Int64
()

По поводу лицензий

Подскажите пожалуйста, могу ли я распространять свой софт под лицензией FreeBSD, если в нем присутствуют некоторые бинарные файлы, которые распространяются под лицензией GPL? и еще такой вопрос, могу ли я некоторые иконки взять из Blender, если опять же моя программа будет распространяться под лицензией FreeBSD?

 , ,

Int64
()

Цифровые аудио студии

Всем привет, хочу попробовать писать свою музыку, какую для этого программу лучше использовать, раньше никогда не пробовал писать музыку, только на гитаре что-то могу по сочинять, так что считай с чистого листа все начну ) ну и где можно найти хорошие лупы и различные инструменты

 

Int64
()

DLang и лицензия

Всем привет, не очень разбираюсь в лицензиях и не понимаю их. Так вот скажите, могу ли я распространять бинарники LDC (который на LLVM) вместе со своей программой? А, ну и под какой лицензией тогда должна распространяться моя программа?

Int64
()

SFML & OpenGL. 2 окна и больше

Всем привет, как рисовать 2 окна средствами SFML 2.1, вроде бы делаю как написано в документации, но при создании второго она вылетает:

*** Error in `./core': free(): invalid pointer: 0x00007f4c9e25c800 ***
вот как делаю:
sf::Window MainWin(sf::VideoMode(WindowWidth, WindowHeight, 32), "", sf::Style::Default, Settings);
sf::Window Dialog(sf::VideoMode(SODialogWidth, SODialogHeight, 32), "", sf::Style::Default, Settings);
...

 ,

Int64
()

string to wstring

Всем привет, как перевести string, в wstring, суть в том, что в string содержит unicode символы.

Int64
()

Проброс видеокарты

Раньше получалось успешно пробросить видеокарту в гостевую ОС, но пришлось переустановить систему, и теперь не получается :( в общем все сделал вроде бы по этой инструкции : www.linux.org.ru/wiki/en/Проброс_видеокарты_в_виртуальную_машину
на KVM и virt-manager, ошибок никаких не выдает, но почему-то при запуске консоль виртуальной машины просто ничего не отображает, и ничего не работает, но если убрать PCI устройства, то все начинает работать.

dmesg | grep AMD-Vi
[    0.222896] [Firmware Bug]: AMD-Vi: IOAPIC[5] not in IVRS table
[    0.222898] [Firmware Bug]: AMD-Vi: IOAPIC[6] not in IVRS table
[    0.222899] [Firmware Bug]: AMD-Vi: No southbridge IOAPIC found
[    0.222900] AMD-Vi: Disabling interrupt remapping
[    1.165049] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[    1.165284] AMD-Vi: Initialized for Passthrough Mode

при попытке сделать через консоль пишет вот что:
qemu-system-x86_64 -m 512 -boot c -net none -hda "/home/int64/Virtual OS'es/Win7x64.img" -device pci-assign,host=02:00.0
qemu-system-x86_64: -device pci-assign,host=02:00.0: pci-assign: error: requires KVM support
qemu-system-x86_64: -device pci-assign,host=02:00.0: Device initialization failed.
qemu-system-x86_64: -device pci-assign,host=02:00.0: Device 'kvm-pci-assign' could not be initialized

Int64
()

подключение к pci-stub

Всем привет, раньше чтобы подключить устройство к pci-stub исопльзовал такой вот скрипт:

#!/bin/bash

hostgr="0000:02:00.0"
hostau="0000:02:00.1"
grid="1002 6899"
auid="1002 aa50"

#
echo $grid > "/sys/bus/pci/drivers/pci-stub/new_id"
echo $hostgr > "/sys/bus/pci/devices/$hostgr/driver/unbind"
echo $hostgr > "/sys/bus/pci/drivers/pci-stub/bind"

echo $auid > "/sys/bus/pci/drivers/pci-stub/new_id"
echo $hostau > "/sys/bus/pci/devices/$hostau/driver/unbind"
echo $hostau > "/sys/bus/pci/drivers/pci-stub/bind"

и все работало! Но решил установить себе Ubuntu 14.04 и теперь вот что пишет, когда я пытаюсь выполнить этот скрипт:

Scripts/virt.sh: 9: Scripts/virt.sh: cannot create /sys/bus/pci/drivers/pci-stub/new_id: Directory nonexistent
Scripts/virt.sh: 10: Scripts/virt.sh: cannot create /sys/bus/pci/devices/0000:02:00.0/driver/unbind: Directory nonexistent
Scripts/virt.sh: 11: Scripts/virt.sh: cannot create /sys/bus/pci/drivers/pci-stub/bind: Directory nonexistent
Scripts/virt.sh: 13: Scripts/virt.sh: cannot create /sys/bus/pci/drivers/pci-stub/new_id: Directory nonexistent
Scripts/virt.sh: 14: Scripts/virt.sh: cannot create /sys/bus/pci/devices/0000:02:00.1/driver/unbind: Directory nonexistent
Scripts/virt.sh: 15: Scripts/virt.sh: cannot create /sys/bus/pci/drivers/pci-stub/bind: Directory nonexistent

и собственно что мне теперь делать?

Int64
()

RSS подписка на новые темы