1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    35.045
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    Дело в том, что сама Винда ничего знать не хочет о видеорежиме, этим всем заведует мой драйвер. Рисую все равно все я, а не Винда. Ккак мне кажется, нужно еще проверить, самая главная проблема - это значение поля bmWidthBytes структуры BITMAP. Имея изначально, например, EGA 640x350 - это поле имеет значение 80 (80 байт на одну строку для одной битовой плоскости). Переключаясь в 800х600, я проставляю новое значение 100 для одной структуры, десктопа. Как я подозвреваю, окна сохраняют старое значение, и идет раскалбас по адресам. Поэтому нужно заставить драйвер читать глоабльную переменную из моей собственной структуры, а не доверять значениям структуры BITMAP, которые приходят извне.
    Хотя, возможно проблема еще более запутаннее. Например, курсор мыши отрисовывается нормально, но ограничен старыми рамками по ширине и высоте. Стало быть bmWidthBytes он берет правильные (скорее всего из BITMAP для десктопа, который я меняю). Но почему тогда ширина и высота не такие, как нужно. Непонятно...
     
  4. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Zelya, ну вообще работать должно так: у нас есть где то в памяти некий битмап, куда винда рисует изображение. Это и есть наш "экран" где винда совмещает видеовывод всех программ. Размер этого экрана может превышать реальный экран для создания эффекта "уползания частей таскаемых окон за экран". А вот у каждой программы есть свой битмап для рисования собственных картинок. И именно оттуда винда берёт данные для формирования в собственном битмапе изображения, которое будет выведено на реальное устройство драйвером. Таким образом изменение видеорежима непосредственно на устройстве не меняет ничего в картинке лежащей где то в памяти. Но приводит к необходимости того, что драйвер в процессе отрисовки должен "на лету" конвертировать данное изображение в нужный формат аппаратного видеорежима.
     
  5. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    Bato-San,
    Винда 1.х - 2.х (по-моему 3.0 тоже) не расчитана на смену режима не то что во время работы, а не расчитана впринципе. Только преинсталяция. Поэтому, драйвер может полностью полагаться на параметр bmWidthBytes, инициализировав его лишь раз и абослютно не замарачиваясь его изменнениями. Под свой метод я передаю битмап только рабочего стола (еще и глобальную структурку GDIINFO апдейчу), как оказывается, этого мало. Скорее всего, разные окна, имея сови структуры битмап, и дальше уверяют драйвер, что он работает в другом режиме. Все эти места мне еще предстоит отловить.
    Но еще раз расскажу о проблеме, которая заставляет волноваться: при переключении режима курсор мыши отображается правильно, но ограничен старыми рамками. Стало быть он берет параметр bmWidthBytes правильно, но ограничения по ширине и высоте остаются старыми. Так что расколбас может быть еще глубже.
     
  6. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Третья рассчитана.
     
  7. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    3.1 - да. 3.0, вроде нет.
     
  8. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    Кто-нибудь знает в C# возможно определить размер памяти на компьютерах или такое невозможно. Долгие годы весь интернет обшарил и всю литературу и все зря. Нашел единственное то что можно определить лишь количество планок памяти и её ёмкость каждой, а определить сумму всей памяти почему-то в С# нельзя
    Да, на Античате, но там злые админы поставили вечный замок, поэтому тему тут открыл
     
  9. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    Я дaлеко не программист и уж тем более не знаток C#. Но код мне кажется похож на бред.

    Кто вам мешает после определение объема каждой памяти, внести это все в переменную и сложить ?

    Если мне не изменяет память, в windows есть API функция GlobalMemoryStatus.
     
    Последнее редактирование: 29 июл 2014
  10. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    tuliss, это не то

    ---------- Сообщение добавлено в 01:14 ---------- Предыдущее сообщение размещено в 00:51 ----------

    Нахожу коды типа таких, которые определяют память:
    using System;
    using System.Diagnostics;

    class app
    {
    static void Main()
    {
    var pc = new PerformanceCounter("Mono Memory", "Total Physical Memory");
    Console.WriteLine("Physical RAM (bytes): {0}", pc.RawValue);
    }
    }

    но попытка запустить скрипт ВСЕГДА приводит к ЭТОМУ

    ceb70d73181d1d981ba1fc8c895a85f9.jpg
    выходит на с# нельзя определить память компьютера как в DXDIAG?
    71f5fb825d2fa781400ce2ded44930f1.jpg
     
    Последнее редактирование: 29 июл 2014
  11. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    Честно говоря хотел уже тут расписать много чего, но нашел примеры.

    как узнать количество памяти в компе - .NET - RSDN

    Вообще форум вроде бы не о программирование ?
     
    Последнее редактирование модератором: 4 янв 2020
  12. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
  13. Zelya

    Zelya

    Регистрация:
    20 апр 2007
    Сообщения:
    722
    Захарился я ремонтировать "переключалку". Повесил на опцию, наслаждайтесь:
     
    Последнее редактирование модератором: 12 июн 2015
    SAS и A.P.$lasH нравится это.
  14. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    Eraser, спасибо за ссылку, но такую программу вставить в моё приложение нельзя. Там ключ на который указывается using System.Linq; без ключа это выражение недействительно. Как извлечь ключ с программы на который указывается using System.Linq?
     
  15. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    Еще советую почитать про WMI . Ей часто пользуются не то, что программисты, а обычные СисАдмины.
    Еще советую найти книгу и почитать Агуров П. C# Сборник Рецептов. Там много примеров на WMI.
     
  16. Kristobal Hozevich Hunta Реликтовый гоминид

    Kristobal Hozevich Hunta

    Регистрация:
    24 апр 2006
    Сообщения:
    1.174
    Ниже отрывок из heathaze.vfp (ARB шейдеры OpenGL, вершинная программа).
    Комментарий мой.

    Не понимаю физический смысл этого фрагмента.
    Каждую команду по отдельности понимаю, а что именно тут происходит - нет.

    Код:
    DP4
    
    Вычисление скалярного произведения	DP4 dest, src0, src1;	
    Данная команда вычисляет скалярное произведение четырехмерных векторов и записывает результат во все компоненты dest
    
    dest=src0.x*src1.x+src0.y*src1.y+src0.z*src1.z+src0.w*src1.w
    
    .row [n] используется для получения заданного столбца матрицы как 4-х мерного вектора.
    Т.е. вроде бы это только деформация текстурных координат, без изменения положения вершин полигонов. Но что именно тут происходит?

    Добавление:

    Допустим, я беру координаты вершины, дублирую их и имитирую цикличное (например, по синусоиде) изменение положения вершины по осям X (колебания влево-вправо), Z (колебания ближе-дальше). Соответственно меняются текстурные координаты, привязанные к данной вершине, в результате чего текстура "плавает".

    Похоже на правду?
     
    Последнее редактирование: 1 авг 2014
  17. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    Работа с системным реестром Windows на C#

    Кто-нибудь знает возможно ли работать с ключами реестра DWORD на C#? Типа DWORD в этом языке не существует. Обшарил весь интернет и всю литературу и все зря - к сожалению доступны лишь строковые ключи. Сделать можно только запись ключа DWORD MyRegistryKey.SetValue(Key, 1, RegistryValueKind.DWord); а вот чтение такого типу ключа сделать в C# нельзя. Есть какая-нибудь утилита или ассемблерская вставка чтобы сделать чтение ключа DWORD в C#?
     
  18. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Используй int (коим DWORD и является).
     
  19. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    Попробовал - работает, но теперь уже в этот раз неустранимая проблема. DWORD для C# не подходит.
    //Считываем данные ключа
    KeyValue = (int) MyRegistryKey.GetValue(Key);

    //Если ключ не существует - создаем
    if (KeyValue == 0)
    {
    MyRegistryKey.SetValue(Key, KeyValue);
    }
    Эта операция работает только со строковыми типами то что в случае отсутствия ключа его можно создать, а с DWORD - НЕ РАБОТАЕТ. После выполнения KeyValue = (int) MyRegistryKey.GetValue(Key); в случае отсутствия ключа ВСЕГДА обрывается ошибкой "В экземпляре объекта не задана ссылка на объект"
     
  20. Alex Kagansky

    Alex Kagansky

    Регистрация:
    17 дек 2007
    Сообщения:
    3.054
  21. netsky2004

    netsky2004

    Регистрация:
    31 янв 2007
    Сообщения:
    1.443
    Alex Kagansky, ничего там непонятно и к тому же на английском. Просто интересно почему при выполнении строкового KeyValue = (string) MyRegistryKey.GetValue(Key) в случае отсутствия ключа продолжить процедуру дальше можно и создать ключ если его нет, а при выполнении DWORD KeyValue = (int) MyRegistryKey.GetValue(Key) в случае отсутствия ключа продолжить процедуру нельзя?
    -------------------------
    Кстати кто помнит программу VirtualDub которая при первом запуске вначале показывает окно приветствия, потом записывает в реестр ключ DWORD и запускается. При повторном запуске VirtualDub уже не показывает окно приветствия так как есть в наличии ключ DWORD в реестре. На каком языке создавалась VirtualDub? С# выходит с таким принципом работы несовместим, что за заразы разработчики Visual Studio лишили возможности сделать программу чтобы были записи ключей DWORD в случае их отсутствия ПОЗОР MICROSOFT!
     
  22. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Позор тем, кто доки читать не хочет.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление