Программирование графики в ассемблере?

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

В будущем вы можете использовать curl_getinfo для извлечения кода состояния запроса, чтобы убедиться, что он не сработал, и дополнительно сопоставить его с кодом 200, что означает ОК.

$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

Помимо этого несколько ошибок в ваших циклах.

С SimpleXML:

<?php
$url = "https://thehockeywriters.com/category/san-jose-sharks/feed/";

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$data = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ($httpcode !== 200)
{
    echo "Failed to retrieve feed... Error code: $httpcode";
    die();
}

$feed = new SimpleXMLElement($data);
// list all titles...
foreach ($feed->channel->item as $item)
{
    echo $item->title, "<br>\n";
}

С DOMDocument:

<?php
$url = "https://thehockeywriters.com/category/san-jose-sharks/feed/";

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$data = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

if ($httpcode !== 200)
{
    echo "Failed to retrieve feed... Error code: $httpcode";
    die();
}

$xml = new DOMDocument();
$xml->loadXML($data);
// list all titles...
foreach ($xml->getElementsByTagName("item") as $item)
{
    foreach ($item->getElementsByTagName("title") as $title)
    {
        echo $title->nodeValue, "<br>\n";
    }
}

Если вы просто хотите напечатать название / описание всех элементов:

foreach ($feed->channel->item as $item)
{
    echo $item->title;
    echo $item->description;
    // uncomment the below line to print only the first entry.
    // break;
}

Если вам нужна только первая запись без использования foreach:

echo $feed->channel->item[0]->title;
echo $feed->channel->item[0]->description;

Сохранение заголовка и описания в массив для последующего использования:

$result = [];
foreach ($feed->channel->item as $item)
{
    $result[] = 
    [
        'title' => (string)$item->title,
        'description' => (string)$item->description
    ];
    // could make a key => value alternatively from the above with 
    // title as key like this: 
    // $result[(string)$item->title] = (string)$item->description;
}

Foreach с подготовленным оператором MySQLi / PDO :

foreach ($feed->channel->item as $item)
{
    // MySQLi
    $stmt->bind_param('ss', $item->title, $item->description);
    $stmt->execute();
    // PDO
    //$stmt->bindParam(':title', $item->title, PDO::PARAM_STR);
    //$stmt->bindParam(':description', $item->description, PDO::PARAM_STR);
    //$stmt->execute();
}
8
задан starblue 21 November 2009 в 19:13
поделиться

6 ответов

Это кажется, что Вы только используете Ассемблер, потому что Вы, кажется, думаете, что это необходимо. Это не имеет место. Если у Вас нет никакой другой причины его (т.е. желание изучить это), не используйте Ассемблер здесь, если Вы не знаете точно, что Вы делаете.

Для Вашего среднего графического механизма Ассемблерное программирование является абсолютно ненужным. Особенно когда дело доходит до Super Mario разрабатывают 2D механизм спрайта. Даже “медленные” языки сценариев как Python достаточно быстры для таких вещей в наше время.

Добавляя к этому, если Вы не знаете очень точно, что Вы делаете, Ассемблер не будет быстрее, чем C (на самом деле, возможности - он, будет медленнее, потому что Вы повторно реализуете существующие функции C менее эффективно).

13
ответ дан 5 December 2019 в 04:55
поделиться

Я полностью соглашаюсь с samcl

Главная причина для того, чтобы не использовать ассемблер больше состоит в том, что Вы не можете больше получать доступ к Видеопамяти. Назад в первые годы (Вы упомянули замок Wolfenstein) был специальный режим видео, названный 0x13h, где Ваша диаграмма была просто блоком памяти (каждый пиксель был палитрой coloer в пределах от 0-255 <-1 байт), Вы смогли получить доступ к этой памяти через этот определенный режим видео, однако, сегодня вещи намного более сложны

Сегодня у Вас есть очень быстрая Видеопамять и использование Вашего ЦП для доступа, это просто разъединит всю производительность как Вы, ЦП соединен через PCI-Express/AGP/PCI/VESA-LOCALBUS/ISA (<-запоминание любого!?)

Graphicsprogramming часто является большим доступом для чтения и доступом для записи (пиксель чтения, проверьте, прозрачно ли это, умножьтесь с альфой, запишите пиксель, и т.д.), современные интерфейсы памяти намного медленнее, чем прямой доступ в видеокарте. Вот почему действительно необходимо использовать программы построения теней, как Robert Gould предполагает. Таким образом можно записать быстрее и легче понять код, и он не остановит GFX-память.

ЕСЛИ Вы больше интересуетесь Программированием GFX, Вы можете влажный Ваш аппетит с shadertoy, сообщество, выделенное shaderbased эффектам вместе с выполнением WebGLbased Shadercode.

Также Ваш ассемблерный код новичка будет довольно хромым. по качеству как в производительности.Поверьте мне. Требуется много времени для оптимизации такого примитивного кода. Таким образом, Ваш скомпилированный Код C/C++ превзойдет Ваш рукописный asm по характеристикам легко.

Если Вы - initerested в Ассемблере, попытайтесь кодировать что-то как diskaccess. Это - то, где можно получить большую производительность.

11
ответ дан 5 December 2019 в 04:55
поделиться

Я предполагаю, используете ли Вы уже C с DirectX, скорость не является проблемой, и что это - больше осуществления изучения. Для 2D в соответствии с Windows, C и DirectX будет очень быстрым действительно, и как Konrad Rudolph указывает, проворачиваемый ассемблер руки вряд ли будет быстрее, чем высоко оптимизированный SDK.

С чисто образовательной точки зрения это - действие межжала, но довольно сложный. Назад в первые годы домашних компьютеров и первого PCS, графический экран появился в значительной степени как блок памяти, где байты соответствовали одному или нескольким цветным пикселям. Путем изменения значения памяти для хранения содержимого экрана Вы могли вывести на печать точки и следовательно строки, и на спрайтах и т.д... На современных ПК это имеет тенденцию не быть опцией, в этом Вы программируете видеокарту, обычно через SDK, чтобы сделать то же задание. Карта затем делает тяжелую работу, и Вам предоставляют намного более высокий уровень абстракции. Если бы Вы действительно хотели получить ощущение того, на что оно было похоже назад в день, то я рекомендовал бы эмулятор. Для современной игры придерживайтесь своего SDKs.

6
ответ дан 5 December 2019 в 04:55
поделиться

Ассемблер для графики был то, потому что, тогда, большинство людей испытало недостаток в видеокарте с 3-й поддержкой, таким образом, это должно было быть сделано на ЦП, не больше. В наше время это о программировании программы построения теней. Языки программы построения теней позволяют Вам прижиматься с чистым металлом. Таким образом, если что-нибудь, необходимо попытаться кодировать 2-ю графику, чтобы быть основой shadered, тот путь опыт, будет иметь значение как карьерный навык.

Попробуйте CUDA за начинающего.

2
ответ дан 5 December 2019 в 04:55
поделиться

Моя рекомендация состоит в том, чтобы экспериментировать. Возьмите свой код спрайта и запись во многих формах, начиная с C/GDI и C++ / DirectDraw. Еще не волнуйтесь об ассемблере.

DirectX является Вашим лучшим выбором для быстрой графики действия. Изучите это, затем выясните, как микрооптимизировать с ассемблером. В целом ассемблер не собирается делать Ваши вызовы API быстрее. Это собирается открыть гибкость для более быстрого вычисления для вещей как 3D вращение, отображение текстур, штриховка, и т.д.

Запустите с DirectDraw. Вот FAQ. Технически, DirectDraw удерживается от использования после DirectX 7, но можно все еще использовать его и извлечь уроки из него. Это позволит Вам прямую модификацию кадрового буфера, которая является тем, что Вы, вероятно, ищете.

Существуют некоторые полезные учебные руководства и форумы в TripleBuffer Software.

Также рассмотрите обновление Вашего компилятора к Экспрессу Visual C++ 2008 года. VC ++ 6 имеет ошибочный компилятор, который может быть проблематичным с попыткой скомпилировать определенные библиотеки C++.

2
ответ дан 5 December 2019 в 04:55
поделиться

Возможно программировать Ваш собственный 2D механизм в последней версии Directx, если Вы хотите исследовать эту авеню. Можно создать "экранное пространство", выровнял полигон, без перспективного исправления, которого отображенная структура. Можно затем вывести спрайты на печать на попиксельной основе на эту текстурную карту.

что касается режима, 13-го (Peter Parker), это возвращает некоторые памяти!

__asm
{
mov ax,0x13
int 10h
}

Я был бы склонен избегать ассемблера с отпорным крюком, может быть особенно трудно отладить, и поддержать; однако, если Вы хотите исследовать этот предмет более подробно, я могу рекомендовать Графику Michal Abrash, Программирующую Черный список. Это немного старо, но хорошее чтение и даст Вам некоторое понимание графических методов программирования перед 3D аппаратными средствами.

4
ответ дан 5 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: