Я хочу открыть окно OpenGL (чтобы отобразить и захватить нажатия клавиш / события от нажатия мыши) в MacOSX.
Я не хочу использовать Избыток (начиная с него demandds он быть корневым потоком).
Я не хочу изучать Objective C.
Там должен так или иначе получить доступ к API OpenGL в чистом C?
Спасибо!
Существует два способа. Оба требуют создания пользователя и базы данных.
По умолчанию psql подключается к базе данных с тем же именем, что и пользователь. Таким образом, существует соглашение, согласно которому «база данных пользователя» . И нет причин нарушать это соглашение, если пользователю нужна только одна база данных. В качестве примера базы данных будет использоваться база данных mydatabase
.
Используя createuser и createdb , можно указать имя базы данных,
$ sudo -u postgres createuser -s $ USER
$ createdb база данных mydatabase
$ psql -d база данных mydatabase
Вероятно, следует полностью исключить это и вместо этого оставить имя пользователя во всех командах по умолчанию.
$ sudo -u postgres createuser -s $ USER
$ createdb
$ psql
Использование команд администрирования SQL и подключение с паролем через TCP
$ sudo -u postgres psql postgres
И затем в оболочке psql
CREATE ROLE myuser LOGIN PASSWORD 'mypass';
CREATE DATABASE mydatabase WITH OWNER = myuser;
Затем можно войти в систему,
$ psql -h localhost -d mydatabase -U myuser -p < порт >
Если порт неизвестен, его всегда можно получить, запустив в качестве пользователя postgres
следующий порт
SHOW;
Или
$ grep «port = »/etc/postgresql/*/main/postgresql.conf
postgres
пользователь Я предлагаю НЕ изменить postgres
пользователя.
postgres
. У вас должен быть root для проверки подлинности как postgres
. postgres
, который является эквивалентом PostgreSQL для SA
SQL Server, необходимо иметь доступ на запись к базовым файлам данных. И это означает, что обычно ты можешь разрушить хаос в любом случае. Значение можно умножить на 10
EDIT
Отображаемые метки можно изменить следующим образом:
Hashtable labelTable = new Hashtable();
labelTable.put( new Integer( 0 ), new JLabel("0.0") );
labelTable.put( new Integer( 5 ), new JLabel("0.5") );
labelTable.put( new Integer( 10 ), new JLabel("1.0") );
framesPerSecond.setLabelTable( labelTable );
-121--2695303- В итоге я использовал GLFW.
Сначала события клавиатуры не работают; но у них есть пример сценария для построения пакета. После этого, безупречно.
SDL?
http://www.libsdl.org/
Простой слой DirectMedia - это кроссплатформенная мультимедийная библиотека, предназначенная для обеспечения низкоуровневого доступа к аудио, клавиатуре, мышь, джойстику, 3D-аппаратное обеспечение через OpenGL и 2D видеорегистратор. Отказ Он используется программным обеспечением воспроизведения MPEG, эмуляторами и множеством популярных игр, в том числе награда, выигрышный порт Linux «Цивилизация: призыв к власти».
SDL поддерживает Linux, Windows, Windows CE, BINOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD / OS, Solaris, IRIX и QNX. Код содержит поддержку AMIGAOS, Dreamcast, ATARI, AIX, OSF / TRU64, RISC OS, Symbianos и OS / 2, но они официально не поддерживаются.
Единственное чистое нативное API C Mac OS X является углеродом. Однако большинство из него устарено, и вы не можете написать 64-битные приложения, используя углеродную API.
Другое API - какао, которое на основе объективных. Сама каркаса какао ограничивает приложения для того, чтобы иметь один основной нить с отправкой событий сообщений на этом потоке.
GLUT реализован сверху какао, и поэтому на Mac, наследует это ограничение - и поэтому какая-либо другая структура, которую вы могли бы выбрать, чтобы обернуть на вершине этого: QT, SDL, GLUT и т. Д.
даже Если основное ограничение потоков стоит, вам все еще нужно выбрать рамку, которая сэкономит вам хлопот объекта обучения-C.
GLUT - Если все, что вы делаете, является создание окна и ввод обработки, это простой выбор. SDL и QT также предоставляют обработку сообщений на основании C ++ на MacOSX наряду с твердой поддержкой прямой доступ к APIS OpenGL для рендеринга.
Если вы Хотите схватить события на OS X, есть пара вариантов:
Цель C - очень маленький набор дополнений к чистому C-коду. Вам не нужно учиться многое из этого, чтобы получить, используя API какао. Это совсем не зверь, который C ++. Если вы знаете C, вы можете узнать все, что вам нужно через пару часов. Весь лучший пример код и документация в Интернете для какао, а не углерода. Существует код образца OpenGL, который использует какао, по всему Интернету и на веб-сайте Dev Apple.
Тем не менее, все обработка событий должны идти в основной поток независимо от использования API. Это цель главной нити, нет? Вы можете сделать вызовы OpenGL в любой поток, который вам нравится, конечно.
Я не хочу изучать объективную C.
, затем забудьте о записи кода для запуска на ОС X.
Даже если вы не любите блюду. Как этот звук?
Вы смогли взглянуть на захват источников блюдов из здесь и измените его основной цикл. Вы можете найти его в файле GlutaPlication.m
. Вот как это выглядит. Думаю, вы должны легко извлечь необходимые вызовы GLUT, чтобы разместить их в свой основной цикл.
- (void)run
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSRunLoop *runLoop = [[NSRunLoop currentRunLoop] retain];
[self finishLaunching];
__glutEnableVisibilityUpdates();
_running = 1;
while([self isRunning]) {
__glutProcessWorkEvents();
/* Process all pending user events and fire all timers which have
a fire date before or equal to the current system time. */
if(__glutIdleFunc || __glutHasWorkEvents()) {
/* IMPORTANT: This case may _never_ block. */
[self _runMainLoopUntilDate: _distantPast autoreleasePool: &pool];
if(__glutIdleFunc) {
__glutIdleFuncCalled = YES;
__glutIdleFunc();
}
} else {
/* IMPORTANT: We may either block until the next timer in line is
due, or until a new user event arives from the
WindowServer. */
NSDate *limitDate = [runLoop limitDateForMode: NSDefaultRunLoopMode];
[self _runMainLoopUntilDate: limitDate autoreleasePool: &pool];
}
[pool drain];
pool = [[NSAutoreleasePool alloc] init];
}
[runLoop release];
[pool drain];
}