LINUX.ORG.RU

C#/Mono и графические библиотеки

 , , , ,


0

1

Вечер добрый.

Значит, передо мной стоит задача: запилить либу, содержащую биндинги для других либ (OpenTK.OpenGL и DirectX), которая будет кроссплатформенной и которая сможет компилироваться под моно. Идея такова:

1) Выполняется проверка ОС 2) Если ОС==шинда, юзать директх, если нет - OpenTK.opengl И дальше функции, содержащие биндинги

Вопрос: как сделать такой код, который компилировался бы на лине и шинде одновременно, без правок? Есть ли что-то типа динамических references? И как выполнить эту проверку ОС?

Прошу не называть упоротым, а дать ответы.

как сделать такой код, который компилировался бы на лине и шинде одновременно, без правок?

Зачем? Библиотека делается исключительно чтобы ее компиляли? Можно скомпилировать один раз каждый враппер под целевой бекенд и распространять в виде dll'ек. Directx вариант кроме как под виндой ты нигде не скомпилишь я думаю.

В одной будет код в неймспейсе например Wrapper.OpenGL, в другом Wrapper.DirectX

А в программе которая будет использовать эти библиотеки сделать два таргета и что-то типа

#if CONDITION
using Wrapper.OpenGL;
#else
using Wrapper.DirectX;
#endif

Сделать так, чтобы все переключалось в рантайме имхо много геммороя со всех сторон.

======

PS. Другое дело что ты вероятно в охерительную авантюру вписался - привести Direct3d и ogl к одному знаменателю, насколько это вообще реально?

Midael ★★★★★
()
Последнее исправление: Midael (всего исправлений: 3)

Зачем? Уже есть куча таких библиотек. Сделать сейчас подобное - большая и бесполезная работа.

Deleted
()
Ответ на: комментарий от Deleted

Можно поподробнее? Именно на шарпе? Да, кстати, Paradox (движок) юзает подобное? В monogame, вроде, только OpenGL.

mradermaxlol
() автор топика
Ответ на: комментарий от Midael

За код спасибо. Мб сделаю два класса, даже не знаю...

привести Direct3d и ogl к одному знаменателю, насколько это вообще реально?

Взять похожие функции (функции-аналоги) и передавать параметры в зависимости от ОС. Мне кажется, это реально.. Ведь так?

mradermaxlol
() автор топика
Ответ на: комментарий от dib2

А разве нет? В проприетарных дровах он там на хорошем уровне? Все говорят, мол надо юзать огл под пингвином и прямой3д в шиндошсе.

mradermaxlol
() автор топика
Ответ на: комментарий от mradermaxlol

уверен, что на достаточном уровне для ваших задач. если этого уровня внезапно недостаточно - вам нужен 3D-движок.

dib2 ★★★★★
()

Смотри, у тебя есть либа-обёртка в которой проверяется что за платформа, а дальше через AssemblyInfo(Вот тут уже точно не помню, давно .NET не тыкал) подгружаешь dll с нужной реализацией, и выдаёшь наружу экземпляр из подгруженной библиотеки. Как-то так.

В один блоб обломаешься засовывать, у тебя на nix не будет directx библиотек.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Midael

В .net проектах за такое надо батарею на руки кидать. Для выпрямления.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от peregrine

В этом и дело. В шинде (чистой) OpenGL 1.3, а прямой3д - последней версии, поддерживаемой ОС. Дабы работало «искароппке», хочется сделать два вида рендеринга. Или не стоит?

mradermaxlol
() автор топика
Ответ на: комментарий от Dark_SavanT

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

mradermaxlol
() автор топика
Ответ на: комментарий от mradermaxlol

Не стоит. Я больше скажу - более-менее вменяемую обертку к одному OpenGL написать в одиночку практически без шансов.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.